[실전 문제] 구슬 게임
2021. 2. 22. 18:33ㆍ코딩 테스트/실전 문제
1. 문제
철수와 영희는 구슬 게임이 구슬 게임을 하려 한다. 이 구슬 게임의 규칙은 다음과 같다.
- 철수와 영희는 번갈아가며 구슬을 가져간다. 맨 처음에는 철수가 구슬을 가져간다.
- 구슬을 가져갈 때에는, 최소 1개에서 최대 3개까지 구슬을 가져갈 수 있다.
- 가져갈 구슬이 없는 사람이 진다.
예를 들어 5개의 구슬이 있다고 하자. 여기서 철수가 1개의 구슬을 가져가고, 영희가 3개의 구슬을 가져간 후, 철수가 마지막으로 1개의 구슬을 가져갔다고 가정하면 이 게임의 승자는 철수가 된다. 물론, 각자가 어떻게 구슬을 가져가느냐에 따라 승패가 달라질 수 있다. 철수와 영희는 이기기 위해서 최선을 다해서 게임을 플레이 한다. n개의 구슬을 시작으로 게임을 진행한다고 할 때, 철수가 이 게임을 이길 수 있다면 YES, 그렇지 않다면 NO를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 전체 구슬의 개수n 이 주어진다. (0 ≤ n ≤ 1,000,000)
출력
첫째 줄에 철수가 이길 수 있으면 YES, 그렇지 않으면 NO를 출력한다.
예제 입력
case 1) 3
case 2) 5
case 3) 191124
예제 출력
case 1) YES
case 2) YES
case 3) NO
2. 풀이
이 풀이에서 가장 핵심은 철수와 영희가 서로 이기기 위해서 최선을 다한다는 점이다. 즉, 영희차례에서 영희도 철수를 이기고자 하다는 뜻이다. 이 점을 주의하여 나열하면 다음과 같다.
구슬 | 철수 | 영희 | 철수가 이길 가능성 |
1 | O | O | |
2 | OO | O | |
3 | OOO | O | |
4 | case 1) OOO case 2) OO case 3) O |
case 1) O case 2) OO case 3) OOO |
X (모든 케이스 불가능) |
5 | case 1) OOO case 2) OO case 3) O / O |
case 1) OO case 2) OOO case 3) OOO |
O (3번 케이스 가능) |
6 | case 1) OOO case 2) OO / O |
case 1) OOO case 2) OOO |
O (2번 케이스 가능) |
7 | case 1) OOO / O | case 1) OOO | O (1번 케이스 가능) |
8 | case 1) OOO / OOO case 2) OO / OOO case 3) O / OOO |
case 1) O / O case 2) O / OO case 3) OOO / OO |
X (모든 케이스 불가능) |
이를 통해 할 수 있는 것은 4의 배수마다 영희가 이기는 것을 알 수 있다.
import java.io.*;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(br.readLine());
if(n % 4 == 0) bw.write("NO\n");
else bw.write("YES\n");
br.close();
bw.flush();
bw.close();
}
}
728x90
'코딩 테스트 > 실전 문제' 카테고리의 다른 글
[실전 문제] 버튼 누르기 (0) | 2021.02.25 |
---|---|
[실전 문제] 카드 놀이 (0) | 2021.02.24 |
[실전 문제] 직사각형의 합 (0) | 2021.02.22 |
[실전 문제] 트리에서의 거리 (0) | 2021.02.22 |