Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 정렬
- 투 포인터
- 수학
- VR
- 트리
- Unreal Engine 5
- ue5
- 백준
- 자료구조
- 브루트포스
- c++
- 다이나믹 프로그래밍
- 알고리즘
- BFS
- 문자열
- 재귀
- 스택
- 우선순위 큐
- 누적 합
- 유니티
- 유니온 파인드
- 백트래킹
- 그리디 알고리즘
- 다익스트라
- Team Fortress 2
- DFS
- XR Interaction Toolkit
- 시뮬레이션
- 구현
- 그래프
Archives
- Today
- Total
1일1알
백준 1052번 물병 C++ 본문
우선 n<=k이면 물병을 구매하지 않아도 바로 옮길 수 있으므로 0을 출력하고 프로그램을 종료하였다.
그리고 그리디적으로 k>1일 동안 n에서 n을 넘지 않는 최대의 2의 제곱을 빼가면서 n을 줄였다. 물론 k도 1씩 줄여줬다.
빼는 도중에 혹은 while문을 빠져나왔을 때 n이 0이라면 물병을 더 구매할 필요가 없기 때문에 0을 출력하고 프로그램을 종료하였다.
n가 0이 아닌 경우에는 n보다 큰 2의 제곱 중 가작 작은 수에서 n을 빼면 구매해야하는 물병의 최솟값이다.
출력 조건에 정답이 없을 경우에는 -1을 출력하라고 했는데, 정답이 없을 경우는 없을 것 같아서 만들지 않았는데 통과되었다. 속임수였던 것 같다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
using namespace std;
typedef long long ll;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, k;
cin >> n >> k;
int cnt = 0;
if (n <= k) {
cout << 0;
return 0;
}
int start = 1;
while (start < n) {
start *= 2;
cnt++;
}
while (k > 1) {
if (n == 0) break;
while (true) {
if (pow(2, cnt) <= n) {
n -= pow(2, cnt);
break;
}
cnt--;
}
k--;
}
if (n == 0) {
cout << 0;
return 0;
}
start = 1;
while (start < n) {
start *= 2;
}
cout << start - n;
};
'알고리즘' 카테고리의 다른 글
백준 1500 최대 곱 C++ (0) | 2021.12.27 |
---|---|
백준 14496번 그대, 그머가 되어 C++ (0) | 2021.12.26 |
백준 1790번 수 이어 쓰기 2 C++ (0) | 2021.12.24 |
백준 16987번 계란으로 계란치기 C++ (0) | 2021.12.23 |
백준 10835번 카드게임 C++ (0) | 2021.12.22 |