백준 1316번 그룹 단어 체커
문제
그룹 단어는 단어에 있는 모든 문자가 연속해서만 나타나는 단어다. ccazzzzbb는 c, a, z, b가 각각 붙어서 나오므로 그룹 단어이고, aabbbccb는 b가 떨어져서 다시 나오므로 그룹 단어가 아니다. 단어의 개수 N(100 이하)과 단어 N개(소문자, 길이 최대 100)가 주어지면 그룹 단어의 개수를 출력한다.
풀이
판단 기준은 두 가지다. 이미 나온 알파벳이 다시 나오면 안 되고, 다시 나오더라도 바로 앞 글자와 같으면 괜찮다.
단어의 첫 글자부터 하나씩 떼어 가며 처음 보는 글자는 리스트에 추가한다. 이미 리스트에 있는데 바로 앞 글자와 같으면 넘어가고, 다르면 그룹 단어가 아니므로 break로 빠져나온다. 마지막 한 글자까지 break 조건에 걸리지 않으면 cnt에 1을 더한다.
test_case = int(input())
cnt = 0
for _ in range(1, test_case+1):
test_ = input()
val_word = []
before_alphabet = ''
while True:
if len(test_) >= 2:
if test_[0] not in val_word:
val_word.append(test_[0])
before_alphabet = test_[0]
test_ = test_[1:]
elif test_[0] not in val_word:
val_word.append(test_[0])
before_alphabet = test_[0]
test_ = test_[1:]
elif test_[0] in val_word and before_alphabet == test_[0]:
test_ = test_[1:]
elif test_[0] in val_word and before_alphabet != test_[0]:
break
elif len(test_) == 1:
if val_word == [] and before_alphabet == '':
cnt += 1
break
elif test_ not in val_word:
cnt += 1
break
elif test_ in val_word and before_alphabet == test_:
cnt += 1
break
elif test_ in val_word and before_alphabet != test_:
break
print(cnt)짚고 갈 점
- 예외를
if문으로 일일이 나누다 보니 분기가 많아졌다. 더 짧게 풀 수 있는 방법이 있을 것 같다. - 두 번째
elif test_[0] not in val_word는 첫 번째if와 조건이 같아 실행되지 않는다. 지워도 결과는 같다.