https://www.acmicpc.net/problem/9655
9655번: 돌 게임
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
www.acmicpc.net
아이디어
사실 돌의 개수를 1부터 시작해서 조금씩 늘려가다보면
돌이 홀수면 상근이 짝수면 창영이가 이긴다.
그래서 간단히 n 을 2로 나누고 바로 답을 출력해도 되는데
dp 문제이므로 dp 문제로 풀어보자면
dp 배열에 게임의 횟수를 계산한다.
0,1,2 판 일때의 게임 횟수를 계산해놓고
3번째 부터 돌을 1개 가져갈 경우와 3개 가져갈 경우 중 게임이 더 적게 플레이되는 경우에 + 1 한 값을 더한다.
나온 값으로 게임 횟수가 짝수 홀수 인지에 따라 답을 출력한다.
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char* argv[]) {
ios_base::sync_with_stdio(false);
int dp[1001]; // 게임 횟수
int n;
cin >> n;
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
dp[i] = min(dp[i - 1] + 1, dp[i - 3] + 1);
}
// 횟수가 홀수면 상근 짝수면 창용
if (dp[n]%2==1)cout << "SK";
else cout << "CY";
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 가장 큰 수 C++/정렬/레벨2 (1) | 2023.10.22 |
---|---|
백준 12865 평범한 배낭 C++/DP/냅색 알고리즘/골드5 (1) | 2023.10.21 |
백준 1149번 RGB 거리 C++/DP/실버1 (1) | 2023.10.21 |
백준 2579번 계단오르기 C++/DP/실버 3 (1) | 2023.10.21 |
백준 2775번 부녀회장이 될테야 C++/DP/브론즈 1 (1) | 2023.10.21 |