본문 바로가기
Algorithm

백준 1972번 : 놀라운 문자열

by jun_code 2022. 1. 25.

<문제>

링크 : 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