한 단어를 이루고 있는 알파벳들이 모두 연속적으로 위치하고 있어야 그룹문자라고 할 수 있다. 그렇다면 해당 알파벳이 처음 시작되는 자리부터 단어 내에 해당 알파벳의 개수가 반영된 범위까지 모두 그 알파벳으로 이루어져 있어야 한다 고 보았다.
아이디어만으로 구현한 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)
word.count(char) != word[start:end].count(char):
단어 내 해당 알파벳의 첫 위치부터 해당 알파벳의 총 개수만큼 떨어진 자리까지의 범위에서 해당 알파벳 개수를 센다.
그 수가 단어 내에 있어야 할 해당 알파벳의 총 개수와 일치하는 지 확인한다.
그 범위에 총 개수가 존재하지 않는다는 것은 떨어져 있다는 의미이므로 그룹문자가 아니다.