728x90
반응형
Softeer 알고리즘 문제 풀이
Lv2. 비밀메뉴
문제: https://softeer.ai/practice/6269
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
🪄 풀이
M, N, K 값이 그렇게 크지 않아서 O(n^2)으로도 괜찮은 문제였던 것 같다.
부분 문자열 비교 (브루트포스)
import sys
input = sys.stdin.readline
M, N, K = map(int, input().split())
manual = list(map(int, input().split()))
operation = list(map(int, input().split()))
result = "normal"
# 올바른 탐색 범위 설정
for i in range(N - M + 1):
cnt = 0 # 연속된 부분이 맞는지 확인하는 카운트
for j in range(M): # manual 리스트를 직접 순회하며 비교
if manual[j] == operation[i + j]:
cnt += 1
else:
break # 중간에 틀리면 바로 중단
if cnt == M: # manual과 같은 부분을 찾으면
result = "secret"
break # 하나라도 찾으면 더 확인할 필요 없음
print(result)
- operation의 모든 연속된 부분 문자열을 확인
- i를 0부터 N-M까지 반복하며 시작 위치를 정함
- 즉, operation[i]부터 operation[i+M-1]까지 M개의 연속된 부분을 manual과 비교함
- range(N-M+1)를 써야 operation[N-M]부터 operation[N-1]까지 비교할 수 있음
- manual과 operation의 부분이 같은지 확인
- for j in range(M):을 사용해 manual[j]와 operation[i + j]를 하나씩 비교
- cnt 변수를 사용해 일치하는 개수를 카운트
- 중간에 하나라도 다르면 break로 빠져나옴
- 모든 요소가 일치하면 결과 변경
- cnt == M이면 manual과 같은 부분을 찾았다는 의미
- 이때 result = "secret"로 변경하고 더 이상 비교할 필요 없으므로 break
728x90
반응형