본문 바로가기
👩🏻‍💻 Front-end/👾 Algorithm

백준 1316 - 그룹 단어 체커 (Python)

by su-no 2022. 5. 21.

코드

n = int(input())
cnt = 0 # 그룹 단어가 아닌 단어의 수

for i in range(n):
    alphabet = [0 for _ in range(123)] # 1
    word = input()
    for a in range(len(word)):
        if alphabet[ord(word[a])] != 0: # 2
            if word[a] != word[a-1]: # 2-1
                cnt += 1
                break
            else: # 2-2
                continue
        alphabet[ord(word[a])] += 1 # 3

print(n-cnt) # 4

 

풀이

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

따라서 문자열이 주어졌을 때, 각 문자가 처음 나타난것인지 확인해야한다.

#1: 여기서 나는 알파벳을 아스키코드로 변환하는 함수인 ord()를 사용할 것이기 때문에, 'z'의 아스키코드인 122까지 list를 만들어준다.

      문자열을 탐색하면서, 알파벳이 나타날때마다 아스키코드 인덱스에 1을 더해줄 것이다.

#2: 만약 해당 알파벳의 아스키코드 인덱스에 있는 값이 0이 아닐 경우 (= 알파벳이 처음 등장한 것이 아닐 경우)

#2-1: 해당 알파벳이 이전 알파벳과 다를 경우, 그룹단어가 아니므로, cnt를 증가시키고 반복문 탈출

#2-2: 해당 알파벳이 이전 알파벳과 같을 경우 pass

#3: 해당 알파벳의 아스키코드 인덱스를 1 증가시킨다. (알파벳이 등장했다는 것을 표시)

#4: 단어의 수(n)에서 그룹 단어가 아닌 단어의 수(cnt)를 뺀 결과를 출력한다.