사용자 도구

사이트 도구


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()

토론

댓글을 입력하세요:
R W X E R
 
ps/problems/boj/35286.txt · 마지막으로 수정됨: 2026/02/24 13:31 저자 teferi