[파이썬] 백준 2671번 잠수함식별

작성:

백준 #2671 잠수함식별


  • 소리의 패턴으로 어떤 잠수함인지 특정한다.
  • 잠수함의 소리는 두 종류(0, 1)의 연속으로 이루어진다.
  • 한 특정한 소리의 반복은 ~로 표시한다.
  • x|y -> x or y 중 하나를 선택해서 만든 소리의 집합
  • 엔진소리 패턴: (100~1~|01)~


  • 출력: 잠수함이면 SUBMARINE 아니면 NOISE


  • 패턴이 10으로 시작하거나 01로 시작해야한다.
    • 10으로 시작한 경우 0 n개 1 m개로 끝나야 한다.
  • 패턴 앞에서부터 읽어서 끝까지 부합하면 SUBMARINE 아니면 NOISE


1. 조건문 활용

def solution(string):
    i = 0
    while i < len(string):
        if i >= len(string) - 1:
            print('NOISE')
            return
        elif string[i:i+2] == '01':
            i += 2
        elif string[i:i+2] == '10':
            i += 2
            if string[i] == '1':
                print('NOISE')
                return
            while i < len(string):
                if string[i] == '1': break
                else: i += 1
            else:
                print('NOISE')
                return
            while i < len(string) and string[i] == '1':
                if string[i] == '0': break
                else: i += 1
            if i < len(string) - 1 and string[i:i+2] == '00': i -= 1
            if string[i-1] == '0':
                print('NOISE')
                return
        else:
            print('NOISE')
            return
    print('SUBMARINE')

if __name__ == '__main__':
    solution(input())



2. 정규표현식 활용

import re
print('SUBMARINE' if re.compile('(100+1+|01)+').fullmatch(input()) else 'NOISE')

댓글남기기