[백준] 9655번: 돌 게임
2022. 9. 17. 20:04ㆍTIL💡/Algorithms
https://www.acmicpc.net/problem/9655
문제의 완벽한 탐색이라는 게 있는데, 그건 최소 횟수로 돌을 가져온다는 뜻이다.
이 문제는 크게 2가지 풀이 방식이 있다.
1. 홀/짝 구분
2. 다이나믹 프로그래밍
압도적으로 1번이 편리하지만, 학습을 위해 2가지 방식 모두 시도하였다.
1번 풀이
각자 1개 또는 3개를 가져갈 수 있으므로 4n개 기준으로 케이스를 나눌 수 있다.
4n, 4n + 2의 경우 반드시 창영이가 승리하고, 4n + 1, 4n + 3의 경우 반드시 상근이가 승리한다.
이러한 경우를 고려해 홀수의 경우 상근이, 짝수의 경우 창영이가 승리한다는 방식을 쓸 수 있다.
2번 풀이
다이나믹 프로그래밍에 최소의 횟수를 기록하며 상근, 창영인지를 파악할 수 있다.
#include <iostream>
#include <vector>
using namespace std;
int dp[1001];
int main() {
int n;
cin >> n;
dp[1] = 1;
dp[2] = 2;
dp[3] = 1;
for(int i = 4;i <= n;i++) {
dp[i] = min(dp[i - 1], dp[i - 3]) + 1;
}
if(dp[n] % 2 == 0) {
cout << "CY" << '\n';
}
else {
cout << "SK" << '\n';
}
}
'TIL💡 > Algorithms' 카테고리의 다른 글
[백준] 2133번: 타일 채우기 (0) | 2022.09.17 |
---|---|
[백준] 21921번: 블로그 (0) | 2022.09.17 |
[백준] 1927번: 최소 힙 (0) | 2022.09.12 |
[백준] 1976번: 여행 가자 (0) | 2022.09.12 |
[백준] 2467번: 용액 (0) | 2022.09.12 |