전공/알고리즘

백준 2885(초콜릿 식사)

xkdlaldfjtnl 2020. 10. 4. 23:15

www.acmicpc.net/problem/2885

 

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';
}