본문 바로가기
Algorithm/Softeer

[Softeer / Level2] [21년 재직자 대회 예선]비밀 메뉴

by 개복취 2023. 10. 5.

https://www.softeer.ai/practice/info.do?idx=1&eid=623 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

www.softeer.ai


 

문제가 복잡해보이지만 리스트 슬라이싱을 통해 비교하고 조건에 맞는다면 "secret" 을 출력해주면 된다.

주의할 점은, for문 돌릴 때  N-M+1 까지 돌려야 한다는 점? 처음에 N-M 까지라고 생각해서 오답처리 되었다..

 

그리고, 한번 출력 이후로 굳이 확인할 필요없으면 exit() 으로 프로그램 종료를 하는식으로 작성했다.

소프티어 공식 풀이에서는 flag 주고 flag보고 출력을 결정하는 방식으로 풀었다.

 

<내 코드>

import sys

input = sys.stdin.readline

M, N, K = map(int, input().split())
S = list(map(int, input().split()))
T = list(map(int, input().split()))

for i in range(N-M+1):
    # print("i: ", i)
    if S == T[i:i+M]:
        print("secret")
        exit(0)
print("normal")

 

<소프티어 공식 풀이>

m, n, k = map(int, input().split())
M = input().split()
N = input().split()

secret = False
for i in range(n-m+1):
	if M==N[i:i+m]:
    	secret = True
        break
        
if secret == True:
	print('secret')
else:
	print('normal')

 

C에서의 메모리 자원회수 때문에 exit 시스템 콜 하다보니, 파이썬에서도 습관이 남아버렸다.

다른 사람의 풀이에서는 .join 을 통해 리스트를 문자열로 만든다음 존재하는지 체크하는 과정을 거쳤다.