본문 바로가기

알고리즘/백준 문제 풀이

[Python] 1544번 사이클 단어

728x90

https://www.acmicpc.net/problem/1544

 

1544번: 사이클 단어

사이클 단어는 어떤 단어를 원형 모양으로 차례대로 쓴 것이다. 따라서, 어떤 단어를 이렇게 쓴 후에 임의의 단어를 고른다. 그 후에 시계방향으로 차례대로 읽으면 그 것이 단어가 된다. 만약에

www.acmicpc.net


 

22/09/11

 

 

그룹 제출 현황에 있는 문제를 아무 문제나 무작위로 한 문제 골라서 풀었다.

 


 

문제 접근 방식:

 

 

원형으로 쓴다는 아이디어에서 착안하여 덱 자료구조를 떠올렸다.

 

파이썬의 deque은 rotate라는 메서드가 존재하기 때문에 이 메서드를 활용하면 될 것이라고 생각했다.

 

구현은 다음과 같이 진행했다.

 

새로운 단어가 나오면 cycle_word라는 리스트에 그 새로운 단어를 원형으로 써서 읽힐 수 있는 모든 가능한 단어의 리스트를 추가하도록 했다.

 

새로운 단어를 어떻게 판단하냐면 기존의 cycle_word라는 리스트의 원소 안에 새로운 단어가 존재하면 패스, 아니면 새로운 단어인 것이다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 1544번 사이클 단어
from collections import deque
import sys
input = sys.stdin.readline

N = int(input())
cycle_words = list()
for _ in range(N):
    flag = False
    word = deque(input().rstrip())
    for words in cycle_words:
        if ''.join(list(word)) in words:
            flag = True
            break
    if flag:
        continue
    words = list()
    for _ in range(len(word)):
        word.rotate(1)
        words.append(''.join(list(word)))
    cycle_words.append(words)
print(len(cycle_words))