https://www.acmicpc.net/problem/9324
풀이 과정
- 입력받은 문자열을 왼쪽에서 오른쪽으로 하나의 문자씩 진행한다.
- 문자의 개수를 카운팅하다가 문자의 개수가 0이 아닌 3의 배수가 된다면, 다음에 나와야 하는 문자는 해당 문자가 되어야 한다.
- 따라서, 따로 플래그를 두어 개수가 3의 배수가 될 때의 문자를 저장해 두고, 바로 다음 문자가 해당 문자인지 체크하면 된다.
- 맨 마지막이 3의 배수가 딱 될때의 케이스는 따로 빼서 처리해 준다.
- 경우에 따라 OK, FAKE 출력
소스 코드
import sys
from collections import defaultdict
input = lambda: sys.stdin.readline().rstrip()
n = int(input())
for i in range(n):
M = input()
counter = defaultdict(lambda: 0)
check = True
next_flg = False
next_chr = ''
for ch in M:
if not check:
break
if next_flg:
if ch != next_chr:
check = False
next_flg = False
continue
counter[ch] += 1
if counter[ch] % 3 == 0:
next_flg = True
next_chr = ch
# 다음에 문자가 하나 더 나와야 하는 경우
if next_flg:
check = False
if check:
print("OK")
else:
print("FAKE")
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 2225 ] [ DP ] 합분해 (0) | 2021.10.26 |
---|---|
[ 2304 ] [ Stack ] 창고 다각형 (0) | 2021.10.24 |
[ 1261 ] [ Dijkstra ] 알고스팟 (0) | 2021.10.22 |
[ 1987 ] [ DFS ] 알파벳 (0) | 2021.10.21 |
[ 1062 ] [ bit-masking, combination ] 가르침 (0) | 2021.10.18 |