<문제>
링크 : https://www.acmicpc.net/problem/1972
1972번: 놀라운 문자열
대문자 알파벳으로만 이루어져 있는 문자열이 있다. 이 문자열에 대해서 ‘D-쌍’이라는 것을 정의할 수 있는데, 이 문자열에 포함되어 있는, 거리가 D인 두 문자를 순서대로 나열한 것을 이 문
www.acmicpc.net
<코드>
import sys
input = sys.stdin.readline
def sup(M):
m = len(M)
result = True
if m >1:
itv = [i for i in range(m-1)]
for i in itv:
s = set()
for j in range(m-1-i):
_x = M[j]+M[j+1+i]
s.add(_x)
if len(s) != m-1-i:
result = False
return result
else:
return True
N = []
while True:
a = input().rstrip()
if a == '*':
break
N.append(a)
n = len(N)
for i in range(n):
if sup(N[i]) == True:
print(N[i], 'is surprising.')
else:
print(N[i], 'is NOT surprising.')
<풀이>
- '*'가 나올 때까지 입력받고 '*'가 나오면 N에 문자열 추가를 멈춘다.
- 문자열에서 간격을 0부터 문자열길이-2 로 설정하고 각 경우에 따라 문자를 집합에 추가한다.
- 집합의 길이로 문자열이 유일한지 판단할 것인데 집합의 길이가 문자열길이-1-간격과 같으면 간격에 따라 모든 문자가 겹치지 않으므로 유일하다.
- 문자열이 유일한지 판단하기 위해 집합을 통해 겹치는 문자는 제거하고 집합의 길이를 이용한다.
참고 : https://github.com/Junuux/Algorithm/tree/main/Silver/1972
GitHub - Junuux/Algorithm
Contribute to Junuux/Algorithm development by creating an account on GitHub.
github.com
'Algorithm' 카테고리의 다른 글
백준 19948번 : 음유시인 영재 (0) | 2022.01.25 |
---|---|
백준 17413번 : 단어 뒤집기 2 (0) | 2022.01.25 |
백준 1764번 : 듣보잡 (0) | 2022.01.25 |
백준 11725번 : 트리의 부모 찾기 (0) | 2022.01.16 |
백준 11724번 : 연결 요소의 개수 (0) | 2022.01.16 |