Programming

[1544번] 사이클단어 with python

728x90

정답 비율 : 49.213%

언어 : python

레벨 : 실버 4


링크

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

 

1544번: 사이클 단어

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

www.acmicpc.net

문제

사이클 단어는 어떤 단어를 원형 모양으로 차례대로 쓴 것이다. 따라서, 어떤 단어를 이렇게 쓴 후에 임의의 단어를 고른다. 그 후에 시계방향으로 차례대로 읽으면 그 것이 단어가 된다. 만약에 단어 A와 단어 B가 있을 때, 단어 B를 원형으로 써서, 단어 A와 같이 읽을 수 있으면, 두 단어는 같은 단어이다. 따라서, picture와 turepic은 같은 단어다.

N개의 단어가 주어졌을 때, 서로 다른 단어가 총 몇 개인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 단어가 한 줄에 하나씩 주어진다. 단어는 영어 소문자로만 이루어져 있다. N은 50보다 작거나 같은 자연수이며, 단어의 길이는 최대 50이다.

 

출력

첫째 줄에 서로 다른 단어가 몇 개인지 출력한다.

 

  • 예제 입력
5
picture
turepic
icturep
word
ordw
  • 예제 출력
2

이 문제에서는 deque와 set을 사용해서 문제를 해결했다 

풀이 코드

# 1544번 사이클단어
import sys
from collections import deque

n = int(sys.stdin.readline())
w = []
for i in range(n):
    w.append(sys.stdin.readline().rstrip())

for i in range(n):
    dq = deque(w[i])
    while True:
        dq.append(dq.popleft())
        save = "".join(dq)
        if save == w[i]:
            break
        if save in w:
            idx = w.index(save)
            w.pop(idx)
            w.insert(idx, w[i])
w = set(w)
print(len(w))

 

※ 시행착오

이 문제를 어떻게 해결하는지 잘 생각이 안나서 다른사람의 풀이를 참고했다. 다시한번 코드를 복습하면서 완전히 익히는게 좋겠다.

 

728x90

'Programming' 카테고리의 다른 글

[1358번] 하키 with python  (0) 2022.07.16
[1940번] 주몽 with python  (0) 2022.07.14
[1764번] 듣보잡 with python  (0) 2022.07.13
알고리즘 _ 객체지향프로그래밍_ OOP란?(Python)  (0) 2021.09.15