Koder / 박성훈
article thumbnail

범위가 터무니없어서 의심이 갔던 문제.

https://www.acmicpc.net/problem/9660

 

9660번: 돌 게임 6

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000)

www.acmicpc.net

풀고나서 확인해보니 돌 게임3의 확장버전이라고 한다

돌 게임 3도 풀고 와야지 히히

범위가 하도 터무니 없다는 점에서 무언가 꼼수가 있겠다 싶어

일단 100개 정도만 dp를 통해서 구해보았다.

 

dp를 통해 구한 방법은

dp[k-1], dp[k-3], dp[k-4] 중에 창영이가 반드시 승리하는 경우가 있다면

상근이의 승리, 아니라면 창영이의 승리에 해당한다.

중요한것은 아니니 짧게 적어보고

 

암튼 해당 방법을 통해서 구해놓고 보니 알수 있었던 점으로

1111 네개가 붙어있는게 규칙적으로 반복된다는 게 쉽게 눈에 보이고,

주기가 7인 "1011110"이 규칙적으로 반복됨을 알 수 있다.

 

1을 상근, 0을 창영이에 매칭해뒀으므로

N을 입력받아서 7으로 나눈 나머지가 0, 2인경우 창영이의 승리,

아닌경우 상근이의 승리가 되겠다.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main(){
	ll N;
	cin >> N;
	
	/*
	int dp[100] = {0};
	dp[1] = 1; // 1-상근 0-창영
	dp[2] = 0;
	dp[3] = 1;
	dp[4] = 1;
	for(int i=5; i<=100; i++){
		if(!dp[i-1] || !dp[i-3] || !dp[i-4]) dp[i]=1;
		else dp[i]=0;
	}
	for(int i=1; i<100; i++) cout << dp[i];
	*/
	
	N %= 7;
	if(N == 2 || N == 0) cout << "CY";
	else cout << "SK";
	return 0;
}

이 문제와 돌 게임 3을 통해서 최종적으로 1000솔을 달성하지 싶다

반응형