백준 BaekJoon Online Judge // 1316
2021. 1. 18. 15:03ㆍProgramming/BOJ
백준 알고리즘 BaekJoon Online Judge 1316번 "그룹 단어 체커" 문제입니다.
N = int(input())
cnt = 0
for i in range(N):
S = input()
if len(S) <= 1:
cnt += 1
else:
isGroup = True
his = []
for j in range(0, len(S)-1):
if S[j] != S[j+1]:
if S[j] in his:
isGroup = False
break
else:
his.append(S[j])
if S[len(S)-1] in his:
isGroup = False
if isGroup:
cnt += 1
print(cnt)
여러 개의 단어를 입력받아서 그 중에 그룹 단어를 체크하고 그 개수를 구하는 문제다.
여기서 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.
예를 들어 ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나지만 aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
문자열을 앞부터 탐색하면서 자기 자신 문자와 바로 다음 문자를 비교하여 다를 경우 리스트 history(his)에 있는지 여부를 판단한다.
만약 his 리스트에 없다면 이는 최초에 나온 문자이므로 his 리스트에 해당 문자를 넣지만 만약 있을 경우 비교하는 문자들이 다른데 없다는 말은 이 전에 한 번 나온 문자이고 이는 연속해서 나타난다는 조건에 맞지 않기 때문에 그룹 문자임을 판별하는 isGroup 변수를 False로 바꿔준다.
마지막 문자까지 탐색하고 isGroup이 끝까지 True로 남아있다면 그룹 문자임이 확인이 된 것이므로 카운트를 1 증가시킨다.
'Programming > BOJ' 카테고리의 다른 글
백준 BaekJoon Online Judge // 1712 (0) | 2021.01.18 |
---|---|
백준 BaekJoon Online Judge // 2941 (0) | 2021.01.18 |
20210116 // BaekJoon Online Judge // 1157 (0) | 2021.01.16 |
20210116 // BaekJoon Online Judge // 1152 (0) | 2021.01.16 |
20210115 // BaekJoon Online Judge // 10809 (0) | 2021.01.15 |