TIL 41 | 그룹 단어 체커 (백준 1316 python)

Gom·2021년 3월 18일
0

Algorithm

목록 보기
18/48
post-thumbnail
post-custom-banner

🚀문제 바로가기

접근방식

한 단어를 이루고 있는 알파벳들이 모두 연속적으로 위치하고 있어야 그룹문자라고 할 수 있다. 그렇다면 해당 알파벳이 처음 시작되는 자리부터 단어 내에 해당 알파벳의 개수가 반영된 범위까지 모두 그 알파벳으로 이루어져 있어야 한다 고 보았다.
아이디어만으로 구현한 1차코드에는 해당하는 범위를 for문으로 돌려 알파벳을 하나씩 비교했다. 한 차례 개선을 거쳐 for문 비교대신 해당 범위에 존재하는 알파벳의 개수를 비교하도록 변경했으며 코드 초반에 단어의 길이가 1개인 경우는 즉시 그룹문자로 분류하여 소요 시간을 단축시켰다.

import sys
r=sys.stdin.readline

n=int(r())
cnt=0

for _ in range(n):
    word = str(r().strip())
    char=word[0]
    g_word = True
    if len(word) == 1: #단어가 하나의 알파벳으로 이루어져있어도 그룹문자다.
        cnt+=1
    else:
        while g_word==True:
            start=word.index(char)
            end=word.index(char)+word.count(char)
            if word.count(char) != word[start:end].count(char):
                g_word = False
            if end >= len(word):
                break
            else: char = word[end]
        if g_word==True:
            cnt+=1

print(cnt)

if문의 의미

word.count(char) != word[start:end].count(char):

단어 내 해당 알파벳의 첫 위치부터 해당 알파벳의 총 개수만큼 떨어진 자리까지의 범위에서 해당 알파벳 개수를 센다.
그 수가 단어 내에 있어야 할 해당 알파벳의 총 개수와 일치하는 지 확인한다.
그 범위에 총 개수가 존재하지 않는다는 것은 떨어져 있다는 의미이므로 그룹문자가 아니다.

profile
안 되는 이유보다 가능한 방법을 찾을래요
post-custom-banner

0개의 댓글