파이썬 알고리즘

[파이썬] 백준 1316 그룹 단어 체커

뜻 지, 깨달음 오 2022. 10. 19. 07:53

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

1) 단어가 연속되는지를 확인하고 전에 쓰인 단어가 또 쓰였는지 확인해야 하기 때문에, used 라는 배열을 새로 만든다.

N = int(input())

group_word_cnt = 0
for tc in range(N):
    word = input()
    used = [0]*200

 

2) for문을 돌면서 앞 글자랑 비교를 할 거기 때문에, 일단 단어의 첫 글자는 used 배열에 넣어준다

(ASCII코드 사용)

3) 전 글자와 지금 글자가 같거나, 이 글자가 단어에서 처음 등장하면, used 배열에 넣는다

    flg = 0
    used[ord(word[0])] = 1
    for i in range(1, len(word)):
        if used[ord(word[i])] == 0 or word[i-1]== word[i]:
            used[ord(word[i])] +=1

 

4) 3번의 경우가 아닌 경우 (나왔던 단어가 또 나왔는데, 연속되지 않음), flg =1으로 하고 for문을 벗어난다.

5) for문을 끝까지 다 돌았는데 flg가 0이면

모든 글자에서 3번 조건이 해당한다는 말이므로

그룹 단어 개수에 1을 추가해준다

        else:
            flg =1
            break

    if flg == 0:
        group_word_cnt +=1

 

 

전체 풀이)

N = int(input())

group_word_cnt = 0
for tc in range(N):
    word = input()
    used = [0]*200

    flg = 0
    used[ord(word[0])] = 1
    for i in range(1, len(word)):
        if used[ord(word[i])] == 0 or word[i-1]== word[i]:
            used[ord(word[i])] +=1
        else:
            flg =1
            break

    if flg == 0:
        group_word_cnt +=1


print(group_word_cnt)