[白俊]2671号潜水艦を識別


質問リンク
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()