https://www.acmicpc.net/problem/1052
여기서 POINT는,
a. while문 안에서 계속 N/2를 한다 (조건: N의 몫이 0이 될 때 까지)
b. N%2 == 1 or 0 이므로, 1일 경우에 Cnt ++; -> 합쳐지지 못한 물병의 갯수를 카운트 하는 과정 (맨 마지막에 N/2==0 즉, 다 합쳐진 물병의 갯수(1)도 카운트 포함한 값임)
c. N의 몫이 0이 되면 while문을 빠져나와 여태까지 합쳐지지 못한 물병의 갯수를 반환
d. N의 갯수를 늘려가며 (->이게 결국 물병을 사는 과정) Cnt <=K 를 만족할 때 까지 진행
#include<iostream>
#define endl "\n"
using namespace std;
int N, K, Answer;
void Input()
{
cin >> N >> K; // 물병 갯수: N, 한 번에 들고 갈 수 있는 갯수: K
}
int Add_Water(int x)
{
int Cnt = 0;
while (x > 0)
{
//5면
// 2가 되고 -> 1이 됨
if (x % 2 == 1) Cnt++;
x = x / 2;
}
return Cnt;
}
void Solution()
{
if (N <= K) cout << 0 << endl; // 물병 갯수 < 한 번에 들고갈 수 있는 물병 갯수 => 검사할 필요 X
else
{
while (1)
{
int Temp_Result = Add_Water(N);
if (Temp_Result <= K) break; // 왜 K랑 같은경우도 포함되냐? 1%2==1 까지도 계산하므로
Answer++;
N++;
}
cout << Answer << endl;
}
}
void Solve()
{
Input();
Solution();
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
Solve();
return 0;
}
출처 - https://yabmoons.tistory.com/199
'알고리즘' 카테고리의 다른 글
Comparator<T> 인터페이스 - 정렬문제에서 자주 쓰이는 기법 (0) | 2020.01.05 |
---|---|
[개념] KMP 알고리즘 (0) | 2020.01.04 |
[자료구조] 우선순위 큐 (Priority Queue) (0) | 2019.12.24 |
백준 문자열 검색 주요 문제 모음 (0) | 2019.12.21 |
Arrays.sort() (0) | 2019.12.01 |