[파이썬] 백준 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')
댓글남기기