반응형
[Silver IV] 사이클 단어 - 1544
성능 요약
메모리: 32424 KB, 시간: 96 ms
분류
브루트포스 알고리즘(bruteforcing), 자료 구조(data_structures), 해시를 사용한 집합과 맵(hash_set), 구현(implementation), 문자열(string)
문제 설명
사이클 단어는 어떤 단어를 원형 모양으로 차례대로 쓴 것이다. 따라서, 어떤 단어를 이렇게 쓴 후에 임의의 단어를 고른다. 그 후에 시계방향으로 차례대로 읽으면 그 것이 단어가 된다. 만약에 단어 A와 단어 B가 있을 때, 단어 B를 원형으로 써서, 단어 A와 같이 읽을 수 있으면, 두 단어는 같은 단어이다. 따라서, picture와 turepic은 같은 단어다.
N개의 단어가 주어졌을 때, 서로 다른 단어가 총 몇 개인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 단어가 한 줄에 하나씩 주어진다. 단어는 영어 소문자로만 이루어져 있다. N은 50보다 작거나 같은 자연수이며, 단어의 길이는 최대 50이다.
출력
첫째 줄에 서로 다른 단어가 몇 개인지 출력한다.
from collections import deque
n = int(input())
array = []
a = deque()
for i in range(n):
s = deque(input())
a.append(s)
while a:
cnt = 0
tmp = a.popleft()
for i in range(len(tmp)):
tmp.append(tmp.popleft())
if tmp in array:
cnt += 1
if cnt == 0:
array.append(tmp)
print(len(array))
1.입력받은 문자열 길이만큼 원형으로 나올 수 있는 문자열을 deque을 이용하여 다 꺼내보며 중복된 게 있는지 확인한다.
2.중복된 게 존재하지 않을 때만 값을 리스트에 담아주고, 리스트의 길이를 구하면 해결.
'알고리즘' 카테고리의 다른 글
[프로그래머스][level 1][카카오 인턴] 키패드 누르기 - 67256 (1) | 2022.09.19 |
---|---|
[Silver III] 바이러스 - 2606 (그래프 탐색) (1) | 2022.09.18 |
[프로그래머스] [level 2] 튜플 - 64065 (1) | 2022.09.15 |
[프로그래머스][level 1] 약수의 개수와 덧셈 - 77884 (0) | 2022.09.15 |
[Silver IV] 하키 - 1358 (기하) (0) | 2022.09.14 |