본문 바로가기

BAEKJOON 백준

[BAEKJOON/Python3] 백준 1316 그룹 단어 체커

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

*링크로 접속하여 문제를 확인할 수 있습니다.

 

문제 설명

단어에 존재하는 문자들에 대해서는 각 문자가 모두 연속인 단어를 그룹 단어라고 칭한다. cccaab는 c,a,b가 각각 연속해서 나타나기 때문에 그룹 단어이고, accaab는 a가 떨어져서 나타나기 때문에 그룹 단어가 아닌 것이다.

첫째 줄에 입력될 단어의 개수 N이 입력되고, 다음 N개의 줄에 N개의 단어가 입력된다. N개의 단어중에서 그룹 단어가 몇개인지 출력해야 한다.

 

코드

N = int(input())
group = 0
for i in range(N):
    is_group = True
    text = input()
    if len(text) == 1:
        group += 1
        continue
    letters = [text[0]]
    for j in range(1,len(text)):
        if text[j] in letters:
            if text[j] == text[j-1]:
                continue
            else:
                is_group = False
                break
        if text[j] not in letters:
            letters.append(text[j])
    if is_group:
        group += 1
        
print(group)

N은 정수형으로 입력받고 그룹 단어의 개수를 group 변수에 저장할 것이며, 처음에 group 변수는 0으로 초기화한다.

다음 N개의 줄에 단어가 입력되므로 for문을 이용한다. 이 때 각 단어가 그룹 단어인지를 체크하고 있을 변수 is_group을 매번 True로 초기화하도록 한다. 다음은 is_group 초기화를 제외하고 for문이 어떻게 작동하는지를 설명한 것이다.

1. 단어를 입력받고, 만약 단어의 길이가 1이라면 무조건 그룹 단어이기 때문에 group에 1을 더하고 continue로 다음 단어로 가도록 한다.

2. 단어의 길이가 1보다 크다면 letters라는 이미 사용된 문자를 저장할 리스트를 생성하고, 가장 첫 문자를 원소로 넣어놓는다. 그리고 단어의 1번 인덱스부터 끝까지 반복문을 통해 같은 문자는 무조건 연속되는지를 확인한다.

만약 체크하는 문자가 이미 letters에 있다면 직전 문자와 비교하고, 직전 문자와 동일하다면 연속된 것이므로 다음 문자로 넘어가도록, 다르다면 그룹 단어가 아니라는 뜻이므로 is_group을 False로 설정하고 단어에 대한 반복문을 종료한다.

그리고 letters에 없는 문자라면 letters 리스트에 추가한다.

이렇게 한 단어의 모든 문자에 대해 확인을 한 후, is_group이 False로 바뀌지 않고 True로 유지됐다면 group에 1을 더한다.

 

모든 단어에 대해 이 과정을 반복하면 group에는 그룹 단어의 개수가 저장되어 있을 것이다. 이를 출력한다.