[BOJ]白俊2840号ラッキーホイール(Python)
質問する
尚徳は最近ラッキーホイールを購入した.尚徳は車輪の各節にアルファベットを大文字で書いた.下図に示すように.
車輪の同じ字は2回以上現れない.また、車輪は時計回りにしか回転しません.車輪の横に矢印があり、この矢印はいつも一つの場所を指しており、回転すると指す字が変わります.上図は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
入力3
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[0]を矢印が指す位置に指定することで問題を解決します.
Reference
この問題について([BOJ]白俊2840号ラッキーホイール(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@deannn/BOJ-백준-2840번-행운의-바퀴-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol