문제
사이클 단어는 어떤 단어를 원형 모양으로 차례대로 쓴 것이다. 따라서, 어떤 단어를 이렇게 쓴 후에 임의의 단어를 고른다. 그 후에 시계방향으로 차례대로 읽으면 그 것이 단어가 된다. 만약에 단어 A와 단어 B가 있을 때, 단어 B를 원형으로 써서, 단어 A와 같이 읽을 수 있으면, 두 단어는 같은 단어이다. 따라서, picture와 turepic은 같은 단어다.
N개의 단어가 주어졌을 때, 서로 다른 단어가 총 몇 개인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 단어가 한 줄에 하나씩 주어진다. 단어는 영어 소문자로만 이루어져 있다. N은 50보다 작거나 같은 자연수이며, 단어의 길이는 최대 50이다.
출력
첫째 줄에 서로 다른 단어가 몇 개인지 출력한다.
풀이 과정
파이썬을 사용해 풀이했다. 문장을 시계 방향으로 계속 돌려보면서 만약 딕셔너리에 이미 있는 문장이라면 넘기고, 시계 방향으로 문장을 돌려도 없는 문장이라면 추가한다.
import sys
input = sys.stdin.readline
n = int(input().rstrip())
on = {}
for _ in range(n):
string = input().rstrip()
if len(on) == 0: on[string] = 1
else:
now_string = string[1:] + string[:1]
already = 0
while now_string != string:
if on.get(now_string):
already = 1
break
now_string = now_string[1:] + now_string[:1]
if already == 0:
on[string] = 1
print(len(on))
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 2435 : 기상청 인턴 신현수 ( BRONZE 1 ) / Python (0) | 2023.08.15 |
---|---|
[ BOJ ] 1417 : 국회의원 선거 ( SILVER 5 ) / Python (0) | 2023.08.15 |
[ BOJ ] 2765 : 자전거 속도 ( BRONZE 3 ) / Python (0) | 2023.08.15 |
[ BOJ ] 2605 : 줄 세우기 ( BRONZE 2 ) / Python (0) | 2023.08.15 |
[ BOJ ] 6359 : 만취한 상범 ( BRONZE 2 ) / Python (0) | 2023.08.15 |