전공/알고리즘
백준 2885(초콜릿 식사)
xkdlaldfjtnl
2020. 10. 4. 23:15
2885번: 초콜릿 식사
학교 근처 편의점에 새 초콜릿이 들어왔다. 이 초콜릿은 막대 모양이고, 각 막대는 정사각형 N개로 이루어져 있다. 초콜릿의 크기(정사각형의 개수)는 항상 2의 제곱 형태이다. 즉, 1, 2, 4, 8, 16, ...
www.acmicpc.net
2^n개를 무조건 절반씩 쪼갤 수 있을때를 묻는 문제
이진수를 생각하면 된다.
구현도 쉽고 아이디어도 쉬운 문제
아 주의해야 할 점이 아래 코드에서 K==num이랑 K>num일때랑 따로 구분해서 설정해주어야한다.
#include<iostream>
using namespace std;
#define MAX 20
int main() {
int K;
cin >> K;
int num = 1, min_n=-1, how1=0,how2=0;
for (int i = 0; i < 20; i++) {
num *= 2;
}
for (int i = 20; i >= 0; i--) {
if (min_n==-1 && K > num) {
min_n = num*2;
how1 = i+1;
}
else if (min_n == -1 && K == num) {
min_n = num;
how1 = i;
}
if (K >= num) {
K -= num;
if (K == 0) {
how2 = i;
break;
}
}
num /= 2;
}
cout << min_n << " " << how1-how2 << '\n';
}