코딩딩딩

(python) 백준 1316 - 그룹 단어 체커 본문

백준

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

komizke 2023. 2. 11. 23:16

백준 1316

 

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

 

1. 문제 설명

 

같은 알파벳별로 떨어져 있지 않고 나란히 있는 단어를 그룹단어로 정의하며, 그룹단어의 개수를 구하는 문제

 

2. 문제 풀이

 

그룹단어를 결정하는 중요한 점은 각 알파벳별로 나란히 있어야 하는 점이다.

 

그러므로 나란히 있지 않을 때 찾아주면 된다.

 

먼저, 알파벳 26개를 방문했는지 여부를 배열을 활용하여 판단한다. (0: 미방문 1: 방문)

 

character_status = [0 for _ in range(26)]

 

입력받은 단어에 대하여 알파벳별로 방문할 때마다 방문여부를 업데이트한다.

 

그러나, 여기서 방문한 알파벳을 재방문하는 경우가 발생할 수 있다.

 

이러한 경우에는 그 알파벳이 그 전의 알파벳과 다르다면 그 단어는 그룹단어가 될 수 없다는 것을 알 수 있다.

 

word = input()
flag = 0   #그룹단어 판단
for j in range(len(word)):
    if character_status[ord(word[j]) - ord('a')] == 1:   #이미 방문했던 알파벳
        if ord(word[j-1]) != ord(word[j]):
            flag = 1   #그룹단어X
            break
    else:   #방문하지 않은 알파벳
        character_status[ord(word[j]) - ord('a')] = 1

 

3. 전체 코드

 

n = int(input())
res = 0
for i in range(n):
    character_status = [0 for _ in range(26)]
    word = input()
    flag = 0
    for j in range(len(word)):
        if character_status[ord(word[j]) - ord('a')] == 1:
            if ord(word[j-1]) != ord(word[j]):
                flag = 1
                break
        else:
            character_status[ord(word[j]) - ord('a')] = 1
    if not flag == 1:
        res += 1
print(res)
Comments