ps:problems:boj:35286
지하철! 지하철! 몇호선? 몇호선?
| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 35286 |
| 문제명 | 지하철! 지하철! 몇호선? 몇호선? |
| 레벨 | 골드 5 |
| 분류 |
게임 이론 |
| 시간복잡도 | O(T) |
| 인풋사이즈 | T<=100 |
| 사용한 언어 | Python 3.13 |
| 제출기록 | 32412KB / 40ms |
| 최고기록 | 28ms |
| 해결날짜 | 2026/02/24 |
풀이
- 한쪽이 막혀있는 상황에서 시작하는 경우를 생각해보자. 다시말하면 선공이 1을 부르고 시작하는 경우이다.
- 이제부터 이후에 어떤식으로 후공이 선택하든, 선공은 모든 칸을 방문하도록 부를 수 있다.
- 후공이 +1을 하면 선공도 +1, 후공이 +2를 하면 선공은 -1.
- 모든 칸을 방문하게 되므로, 칸의 개수가 홀수이면 선공이 반드시 승리할수 있다.
- 같은 방식으로, 후공 역시 모든 칸을 방문하도록 부를수 있다. 2를 부르고 나서 똑같이 하면 된다. 그러므로 칸의 개수가 짝수이면 후공이 승리하게 된다.
- 즉, 칸이 홀수개이면, 선공이 처음에 1을 불러서 승리할 수 있다.
- 이제 칸이 짝수개일때를 보자.
- 칸이 짝수개일때 선공이 처음에 x를 부른다고 하자. x가 짝수이면, 후공은 x-1을 부른다. 이제 빈 칸은 [0..x-2] 와 [x+1..n] 의 두 구간으로 나뉘어지고 어느쪽이나 짝수 개수이다. 그 다음 선공의 선택에 따라서 한쪽 구간을 선택하게 되고, 선택되지 않은 구간의 수들은 이후에 불릴수 없다. 후공은 이제 선택한 구간에서의 모든 수를 방문하도록 할수 있고 (위에서 했던것과 같은 방법), 구간의 칸수는 짝수이므로 후공이 승리한다.
- 선공이 처음에 부른 x가 홀수일때도 후공이 x+1을 부르면 똑같은 상황이 된다.
- 즉, 칸이 짝수개이면, 후공이 반드시 승리할 수 있다.
- 코드는 n의 홀짝성만 체크하면 된다. 시간복잡도는 O(1)
코드
"""Solution code for "BOJ 35286. 지하철! 지하철! 몇호선? 몇호선?".
- Problem link: https://www.acmicpc.net/problem/35286
- Solution link: http://www.teferi.net/ps/problems/boj/35286
Tags: [game theory]
"""
from teflib import psutils
@psutils.run_n_times
def main():
n = int(input())
print('S' if n % 2 == 1 else 'H')
if __name__ == '__main__':
main()
ps/problems/boj/35286.txt · 마지막으로 수정됨: 2026/02/24 13:31 저자 teferi

토론