흙금이네 블로그

[BOJ] 7575 - 바이러스 (Python) 본문

알고리즘

[BOJ] 7575 - 바이러스 (Python)

흙금 2023. 1. 18. 01:32

 

 

아이디어

 

하나의 코드를 슬라이싱하여 길이가 K인 부분 코드들을 만들고 다른 코드들에 부분 코드가 포함되어 있는지 확인한다.

 

 

풀이

 

처음 입력 받는 코드의 길이를 M, 코드를 정수로 리스트 P에 받고, 나머지 코드들은 문자열로 리스트 code_list에 추가한다.

P를 길이가 K인 부분 코드로 슬라이싱하여 a에 문자열로 저장하고, b에는 반대로 뒤집은 코드 문자열을 저장한다.

code_list에 있는 코드들에서 a 또는 b가 모두 포함되어 있으면 YES, 그렇지 않으면 NO를 출력한다.

 

import sys

input = sys.stdin.readline

N, K = map(int, input().split())
code_list = []
M = int(input())
P = list(map(int, input().split()))
for i in range(N-1):
    input()
    code_list.append(input())
for i in range(M-K+1):
    a = ' '.join(map(str, P[i:i+K]))
    b = ' '.join(map(str, P[i:i+K][::-1]))
    for j in range(N-1):
        if a not in code_list[j] and b not in code_list[j]:
            break
    else:
        print('YES')
        break
else:
    print('NO')

 

Comments