💡문제 분석 요약
영희와 동수는 동전 던지기 게임을 하고 있다. 이 게임은 K번 라운드로 구성되고 다음과 같은 규칙들을 따른다:
- 한 라운드에서 영희와 동수는 한 번씩 동전을 던지고 항상 영희가 먼저 던진다.
- 동전을 던져 앞면이 나오면 1점을 얻고, 뒷면이 나오면 점수를 얻지 못한다.
- 한 명이 남은 기회에 모든 점수를 얻더라도 상대방이 현재까지 얻은 점수보다 작게 되면 게임 도중 어떤 시점에서도 게임은 바로 끝난다.
0이상 K이하인 임의의 정수 M과 N에 대해서, 이것이 항상 게임이 끝난 후 영희와 동수가 얻는 점수가 되는 것은 아니다. 예를 들어서, K = 2인 경우에, M과 N의 모든 경우에 대해서, 이것이 영희와 동수가 얻는 점수가 될 수 있는 지의 여부는 다음 표와 같다:
M N 영희, 동수의 점수가 될 가능성
0 | 0 | 가능 |
0 | 1 | 가능 |
0 | 2 | 불가능 |
1 | 0 | 가능 |
1 | 1 | 가능 |
1 | 2 | 가능 |
2 | 0 | 가능 |
2 | 1 | 가능 |
2 | 2 | 가능 |
위 표에서 영희와 동수의 점수가 0과 2가 되는 것이 불가능한 이유는 두 번째 라운드에서 영희가 뒷면이 나와서 점수를 얻지 못하는 순간 게임의 규칙 3에 의해서 0과 1로 게임이 끝나기 때문이다.
0이상 K이하인 정수 M과 N이 주어질 때, 이 두 정수가 각각 영희와 동수의 점수가 될 수 있는지 여부를 판별하는 프로그램을 작성하시오.
💡알고리즘 설계
# 동점일 경우 항상 가능
# M>N
# 영희가 이길 경우
# K-M(남은라운드)+1<M-N(둘의 차이)-1 -> 불가능
# 동수가 이길 경우
# K-N(남은라운드)<N-M(둘의 차이)-1 -> 불가능
💡코드
K = int(input())
C = int(input())
answer = []
for _ in range(C):
M, N = map(int, input().split())
if M>N:
answer.append(0 if K-M+1<M-N-1 else 1)
elif M<N:
answer.append(0 if K-N<N-M-1 else 1)
else:
answer.append(1)
for a in answer:
print(a)
💡 느낀점 or 기억할 정보
패턴 찾기가 참 어렵다…
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준 24511] queuestack - python (0) | 2025.01.21 |
---|---|
[백준 2992] 크면서 작은 수 - python (0) | 2025.01.17 |
[백준 21921번] 블로그 - python (0) | 2025.01.16 |
[백준 1235] 학생 번호 - python (0) | 2025.01.16 |
[백준 1246] 온라인 판매 - python (0) | 2025.01.14 |