[알고리즘] 소프티어 Lv2. 비밀메뉴 (Python)

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
반응형