본문 바로가기
Develop/알고리즘

[백준/Python] 보드게임컵 C번/Bronze I #27161 크레이지 타임

by favorcat 2023. 1. 24.
반응형
 

27161번: 크레이지 타임

우주 어딘가에는 시간을 셈으로써 시간이 흐르도록 만들어 주는 존재들이 있습니다. 영겁의 시간을 살아온 그들은 더 재미있게 시간을 세기 위해 시간을 세는 게임을 만들어 냈답니다. 그게 바

www.acmicpc.net

문제

입력

출력

풀이

from sys import stdin
n = int(stdin.readline())
idx = 0	# 시간 인덱스
hour_flag = False	# 시간이 역행인지 보는 플래그

for i in range(n):
  # 시계의 종류와 카드에 적힌 시간
  card, clock = map(str, stdin.readline().split())
  clock = int(clock)
  
  # 시간이 역행인지에 따른 시간 인덱스 조정
  if hour_flag: idx -= 1
  else: idx += 1
  
  # 시간은 12시가 최대이므로 넘어가면 다시 조정
  if idx >= 13: idx = 1
  if idx <= 0: idx = 12
  
  # 플레이어가 외칠 시간
  print(idx, end=" ")
  
  # 만약 모래시계를 펼쳤다면
  if card == "HOURGLASS":
  	# 시간 역행 플래그를 반대로 뒤집는다
    hour_flag = not(hour_flag)

  # 만약 플레이어가 외치는 시간과 카드에 적힌 시간이 같다면
  if clock == idx :
  	# 모래시계를 꺼냈을 경우, 과부하의 원칙에 따라 둘 다 무효화가 되어
    # 시간 역행 플래그를 다시 원래대로 돌리고, 게임판을 내리칠 수 없다
    if card == "HOURGLASS":
      answer = False
      hour_flag = not(hour_flag)
      
    # 모래시계를 펼치지 않았을 경우, 게임판을 내리칠 수 있다
    else:
      answer = True

  # 외치는 시간과 카드에 적힌 시간이 다르다면, 게임판을 내리칠 수 없다
  else: answer = False
  
  if answer: print("YES")
  else: print("NO")

카드에는 시계의 종류와 시간이 적혀있다.
시계의 종류는 CLOCK, WATCH, HOURGLASS

게임 진행 규칙
1. 플레이어가 자기 차례가 되면 카드를 펼치며 이번 순서의 시각을 외친다. 첫 플레이어는 1시로 시작
2. 방해 요소가 없었다면, 방금 전에 불린 시각에 1시간씩 더해 외친다. 전에 외친 시각이 12시라면 다음 사람은 1시를 외친다.

시간의 법칙
1. 시간 역행의 법칙: 누군가 모래시계(HOURGLASS)를 펼치면 시간이 거꾸로 흐른다. "2시", "1시", "12시" 순으로 외쳐야 한다.
모래시계 카드가 펼쳐질 때마다 시간은 역행한다.
2. 동기화의 법칙: 플레이어가 외친 시각과 카드에 적힌 시각이 일치하면, 플레이어들은 게임판 중앙을 내리쳐야 한다.

과부하의 원칙
펼쳐지는 카드가 동시에 2개 이상의 법칙을 발동한다면, 어떤 법칙도 적용하지 않는다.
ex, 누군가 모래시계 카드를 꺼내고, 외치는 시각과 카드에 적힌 시각이 일치하면 게임판 중앙을 내리치지 않고, 시간이 역행하지 않는다.

반응형

Comment