백준: Class 2 ① - 1085, 2108, 2292, 2609, 2798, 2839, 2869
</br>
2로 올라가 보자
클래스 2는 실버 4, 5가 주를 이루고 있다.
</br>
1085: 직사각형에서 탈출
https://www.acmicpc.net/problem/1085
int x, y, w, h;
cin >> x >> y >> w >> h;
cout << min({x, y, w-x, h-y}) << endl;
처음 보고 와 이거 생각보다 왤케 어려워~ 했는데 x, y의 범위를 보니 아주 쉬운 문제였다
범위를 꼭 꼭 잘 보자
</br>
2108: 통계학
https://www.acmicpc.net/problem/2108
int sum = 0;
for(int i = 0; i < n; i++){
cin >> nums[i];
sum += nums[i];
t[nums[i]+4000]++;
}
sort(nums, nums+n);
int p = *max_element(t, t+8001);
int ans = 0;
for(int i = 0; i < 8001; i++){
if( t[i] == p ){
if( ans ){
ans = i-4000; break;
}
else ans = i-4000;
}
}
cout << round((double)sum/n) << endl;
cout << nums[n/2] << endl;
cout << ans << endl;
cout << nums[n-1] - nums[0] << endl;
가끔 이런 문제가 조금 당황스럽다
최빈값의 경우 map으로 해도 되지만 범위가 작길래(절댓값 4000 이내) 배열로 해 봄
</br>
2292: 벌집
https://www.acmicpc.net/problem/2292
벌집 문제는 다 이 인덱스인가
if( n == 1 ){
cout << 1 << endl;
return 0;
}
int ans = 1, tmp = 2;
while( 1 ){
tmp += 6*ans;
if( tmp > n ){
cout << ans+1 << endl;
break;
}
ans++;
}
벌집 문제는 규칙 찾는 게 중요하다 주로 6이랑 관련 있지
1: 1
2: 2 ~ 7 6
3: 8 ~ 19 12
4: 20 ~ 37 18
5: 38 ~ 61
이 문제는 이런 식
</br>
2609: 최대공약수와 최소공배수
https://www.acmicpc.net/problem/2609
int gcd(int a, int b){
if( b > a ) return gcd(b, a);
if( a%b == 0 ) return b;
return gcd(b, a%b);
}
gcd는 외워 둡시다
최소공배수는 a*b / gcd
</br>
2798: 블랙잭
https://www.acmicpc.net/problem/2798
void func(int now, int ind, int d){
if( now > m ) return; // *
if( d == 3 ){
ans = max(ans, now);
return;
}
for(int i = ind+1; i < n; i++){
func(now+nums[i], i, d+1);
}
}
기본적인 조합(브루트포스, 백트래킹)
표시한 if문처럼 바운드를 추가하면 더욱 효율적인 브랜치 & 바운드
</br>
2839: 설탕 배당
https://www.acmicpc.net/problem/2839
int ans = -1;
for(int i = n/5; i >= 0; i--){
int k = n - 5*i;
if( k % 3 == 0 ){
ans = i + k/3;
break;
}
}
cout << ans << endl;
이게 왜 dp 문제라 되어 있을까 그냥 그리디 같은데
</br>
2869: 달팽이는 올라가고 싶다
https://www.acmicpc.net/problem/2869
if( v < a ){
cout << 1 << endl;
return 0;
}
if( (v-a) % (a-b) == 0 ) cout << (v-a) / (a-b) + 1 <<endl;
else cout << (v-a) / (a-b) + 2 <<endl;
예전에 메이플 스토리 만화에서 본 거 같은데ㅋㅋ
일단 입력이 a <= v라서 위의 if문은 필요 없긴 하다
0 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ v
(a-b) * (n-1) | a
이런 느낌으로 생각하면 쉽다
</br>
클래스 2 성공~~
</br>
댓글남기기