
❓ 문제
백준 실버5 문제 > 그룹 단어 체커
❗ 해결
테스트케이스에 주어진 단어를 시뮬레이션 해보았다.
시뮬레이션 할 단어는 그룹 단어가 아닌 경우를 테스트 해봤다. 이게 뭔가 답을 찾기 더 빠를거 같아서..
주어진 단어 : abcabc
에러를 체크할 Flag 변수(error_flag)를 선언하고, 맨 처음 단어를 중복 단어 체크용 리스트에 넣는다.
check = [a]
그 다음부터 반복문을 돈다. 반복문은 처음 단어를 넣었으니 그 다음 단어부터 시작한다.
반복문을 도는데, check랑 비교한다.
check에 없으므로 b도 check에 넣고 넘어간다.
check = [a,b]
그 다음 단어를 비교한다. c도 check에 없으니 넣어주고 넘어간다.
check = [a,b,c]
그 다음 단어는 a이다. 일단 a는 리스트에 있으니, 연속 단어인지 아닌지 체크를 해봐야 한다.
만약에 다음 단어가 c인 경우에 abcc가 되므로 그룹단어가 될 수 있다.
바로 이전 단어와 비교를 해야 하는데, 나는 앞에 넣어준 바로 이전 단어인 c를 check[-1] 해서 비교해보았다.
만약 a가 이미 check에 있는데, check[-1]과 비교해도 같은 단어가 아닌 경우에는
error_flag 값을 True로 설정하고, 해당 단어는 그만 비교한다.
해당 단어를 다 비교했을 때 error_flag값이 False인 경우에만 Count를 1씩 올려준다.
N = int(input())
words = [str(input()) for _ in range(N)]
check = []
error_flag = False
count = 0
for word in words:
error_flag = False
check = [word[0]]
for i in range(1, len(word)):
if word[i] not in check:
check.append(word[i])
# 큐에 있는 경우
else:
if check[-1] == word[i]:
# 같은 단어인 경우에 넘어간다.
check.append(word[i])
else:
# 다른 단어인 경우에는 flag값을 true로 설정 하고 반복문을 빠져 나간다.
error_flag = True
break
# 반복문을 돌면서 error 가 없을 경우에만 count를 1 올려 준다.
if error_flag == False:
count += 1
print(count)
