상덕이는 최근에 행운의 바퀴를 구매했다. 상덕이는 바퀴의 각 칸에 알파벳 대문자를 아래 그림과 같이 적었다.
바퀴에 같은 글자는 두 번 이상 등장하지 않는다. 또, 바퀴는 시계방향으로만 돌아간다. 바퀴 옆에는 화살표가 있는데, 이 화살표는 항상 한 곳을 가리키고 있으며, 돌아가는 동안 가리키는 글자는 바뀌게 된다. 위의 그림에서는 H를 가리키고 있다.
상덕이는 바퀴를 연속해서 K번 돌릴 것이다. 매번 바퀴를 돌릴 때 마다, 상덕이는 화살표가 가리키는 글자가 변하는 횟수와 어떤 글자에서 회전을 멈추었는지를 종이에 적는다.
희원이는 상덕이가 적어놓은 종이를 발견했다. 그 종이를 바탕으로 상덕이가 바퀴에 적은 알파벳을 알아내려고 한다.
상덕이가 종이에 적어놓은 내용과 바퀴의 칸의 수가 주어졌을 때, 바퀴에 적어놓은 알파벳을 알아내는 프로그램을 작성하시오.
3 3
1 A
2 B
3 C
!
5 6
1 A
2 B
5 B
1 C
2 A
2 B
B?A?C
8 8
4 V
3 I
7 T
7 A
6 R
5 N
1 O
9 H
HONITAVR
n, k = map(int, input().split())
circle = ['?'] * n
for i in range(k):
spin = input().split()
# 한바퀴 넘어가는 경우에 기존 자리에서 바뀐 차이만큼을 구하기 위해 나머지 구함.
s = int(spin[0]) % n
s_char = str(spin[1]) # 문자
# 큐가 아닌 리스트를 슬라이싱 한 후에 앞뒤 순서를 바꿔 다시 붙임.
circle = circle[-s:] + circle[:-s]
# 움직인 후에 화살표가 가리키는 자리(circle[0])이 '?'일 때
if circle[0] == '?':
# 입력된 문자가 이미 다른 자리에 존재하는 경우, 바퀴 존재하지 않음
if s_char in circle:
print('!')
break
# 처음 넣는 문자일 경우, 해당 자리에 문자 넣음.
circle[0] = s_char
# 화살표가 가리키는 자리가 현재 문자와 같은 경우 넘김.
elif circle[0] == s_char:
continue
# 화살표가 가리키는 자리에 현재 문자와 다른 문자가 존재함. 자리가 겹치므로 바퀴 성립 X
else:
print('!')
break
# 반복문이 모두 실행된 후에 바퀴 문자 출력
else:
print("".join(circle))
시계방향으로 돌리면 문자 바뀌는 순서는 반시계방향 순서.
출력은 시계방향 순서.
circle을 바퀴. circle[0]을 화살표가 가리키는 자리로 지정하여 문제풀이.