[백준] 2671번 잠수함식별

HL·2021년 6월 29일
0

백준

목록 보기
99/104

문제링크

https://www.acmicpc.net/problem/2671

풀이

  • 체크해야할 패턴을 함수별로 나눠서 재귀

후기

  • 겁먹었는데 다행히 풀었다

코드

def solution():
    string = input()
    if check_total(string):
        print('SUBMARINE')
    else:
        print('NOISE')


def check_total(string):
    # 쪼개서 체크
    for i in range(1, len(string)):
        s1 = string[:i]
        s2 = string[i:]
        if s1 and (check_left(s1) or check_right(s1)):
            if check_total(s2):
                return True
    # 전체만 체크
    if check_left(string) or check_right(string):
        return True
    return False


def check_left(string):

    # 첫 100 체크
    if len(string) < 3:
        return False
    if string[:3] != '100':
        return False

    # 연속 0 체크
    i = 3
    while True:
        if i == len(string):
            return False
        if string[i] != '0':
            break
        i += 1

    # 첫 1 체크
    if i == len(string):
        return False
    if string[i] != '1':
        return False

    # 연속 1 체크
    while True:
        if i == len(string):
            return True
        if string[i] != '1':
            return False
        i += 1


def check_right(string):
    if string == '01':
        return True
    return False


solution()
profile
Swift, iOS 앱 개발을 공부하고 있습니다

0개의 댓글