백준 18109 : 도깨비불 [Python 파이썬 / 문자열]

Dong-Hyeon Park·2022년 6월 13일
0

백준

목록 보기
4/25
post-thumbnail

백준 18109: 도깨비불

처음엔 문제를 읽어보고 어려운 문제라고 착각하였으나,
'도깨비불' 현상이 생기는 지점만 판단할 수 있다면 쉽게 해결할 수 있는 문제였다.

예시를 확인해보면

(“입” → “이보”), (“이봇” → “이보세”), (“이보셍” → “이보세요”)
(“콛” → “코딩”), (“코딩학” → “코딩하기”)
(“맟” → “마추”), (“마춤뻡” → “마춤뻐비”), (“마춤뻐비 틀렸” → “마춤뻐비 틀려써”), (“마춤뻐비 틀려썽” → “마춤뻐비 틀려써요”)

모두 모음 + 자음 + 모음이 입력될 때의 경우이다.
여기서 한가지 놓칠 수 있는 경우의 수가 있는데, ㅄ, ㄵ과 같은 이중자음이 존재한다.
즉, 모음 + 이중자음 + 모음의 경우에도 도깨비불 현상이 발생할 수 있다.
또한 ㅃ, ㅉ, ㄸ는 받침으로 들어갈 수 없다는 것을 유의해야 한다.

그래서 아래와 같이 코드를 짰다.

s = input()

jaeum = {'q', 'w', 'e', 'r', 'R', 't', 'T',
         'a', 's', 'd', 'f', 'g',
         'z', 'x', 'c', 'v'}
moeum = {'y', 'u', 'i', 'o', 'O', 'p', 'P',
         'h', 'j', 'k', 'l',
         'b', 'n', 'm'}
d_jaeum = {'rt', 'sw', 'sg', 'fr', 'fa',
           'fq', 'ft', 'fx', 'fv', 'fg', 'qt'}

s_len = len(s)
answer = 0
for i in range(1, s_len - 2):
    if s[i - 1] in moeum and s[i] in jaeum and s[i + 1] in moeum:
        answer += 1
    elif s[i - 1] in moeum and s[i:i+2] in d_jaeum and s[i + 2] in moeum:
        answer += 1

# 탐색 안 한 마지막 문자 3개 탐색
if s[-3] in moeum and s[-2] in jaeum and s[-1] in moeum:
    answer += 1
print(answer)

우선 도깨비불의 경우의 수에 포함될 수 있는 자음, 모음, 이중자음을 set에 저장하고,
순차적으로 문자열을 탐색하며 도깨비불 현상인지를 확인하였다.
단순 무식하게 짠 코드라 더 좋은 코드가 있을 것 같긴하다..

profile
Android 4 Life

0개의 댓글

관련 채용 정보