n1개의 원소로 이루어져 있는 수열 A의 정보와, n2개의 원소로 이루어져 있는 수열 B의 정보가 주어졌을 때 수열 B가 수열 A의 연속부분수열인지를 판단하는 프로그램을 작성해보세요.
수열 B가 수열 A의 원소들을 연속하게 뽑았을 때 나올 수 있는 수열이라면 연속부분수열이라 부릅니다.
예를 들어 수열 A가 [1, 5, 2, 6] 일때 수열 B가 [5, 2]라면 수열 B는 수열 A의 연속 부분 수열이지만, 만약 수열 B가 [5, 6]이라면 연속 부분 수열이 아닙니다.

import sys
# 정수 n1과 n2를 입력받습니다.
n1, n2 = tuple(map(int, input().split()))
# arr1을 입력받습니다.
arr1 = list(map(int, input().split()))
# arr2를 입력받습니다.
arr2 = list(map(int, input().split()))
# arr2이 arr1의 연속부분수열인지 확인합니다.
for i in range(n1):
# arr1의 i번 index부터의 수열이 arr2와 완전히 일치하는지 확인합니다.
# 즉, arr1[i] == arr2[0], arr1[i+1] == arr2[1]...이 성립하는지 확인합니다.
# success : arr1의 i번 index부터의 수열이 arr2와 완전히 일치할때만 true, 그 외 false
success = True
for j in range(n2):
# arr1의 index가 범위 밖으로 벗어날때
if i + j >= n1:
success = False
break
# arr1과 arr2가 일치하지 않을때
if arr1[i + j] != arr2[j]:
success = False
break
# 완전히 일치할 경우, arr2는 arr1의 연속부분수열이 맞습니다.
# 구현의 편의를 위해 sys라이브러리를 가져와 sys.exit()으로 프로그램을 강제 종료하였습니다.
if success:
print("Yes")
sys.exit()
# 완전히 일치하는 경우가 하나도 없을 경우, arr2는 arr1의 연속부분수열이 아닙니다.
print("No")
# 나의 풀이 --------------------------------------------
n1, n2 = tuple(map(int,input().split()))
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))
found = False
# 시작점이 같은 코드 찾기
for i in range(len(arr1) - len(arr2) + 1): # arr1의 개수만큼 찾기
if arr1[i] == arr2[0]: # arr2의 첫 시작점이 arr1의 원소와 같으면
match = True # 매치함
for j in range(1, len(arr2)): # arr2의 길이만큼 찾기
if arr1[i+j] != arr2[j]: # 다음 원소가 같지 않으면 그만하고
match = False # 매치하지 않음
break # 구문을 빠져나감
if match: # 만약 매치하면
found = True # found 변수를 True로 변경
break # 그리고 구문을 빠져나감
if found == True:
print("Yes")
else:
print("No")
오류 코드
n1, n2 = tuple(map(int,input().split()))
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))
if arr2 in arr1:
print("Yes")
else:
print("No")
n1, n2 = tuple(map(int,input().split()))
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))
# 시작점이 같은 코드 찾기
for i in range(len(arr1)): # len
for j in range(len(arr2)):
if arr1[i] == arr2[j]:
for k in range(len(arr2)):
if arr1[i+k] != arr2[j+k]:
break
print("Yes")
else:
print("No")
'Python > [코드트리]' 카테고리의 다른 글
[코드트리] Min/Max > n개의 숫자 중 최소 (0) | 2023.07.02 |
---|---|
[코드트리] 탐색 > 2가 3번째로 등장하는 위치 (0) | 2023.07.02 |
[코드트리] 탐색 > 개수 세기 (0) | 2023.06.30 |
[코드트리] 탐색 > 특정 위치의 문자 (0) | 2023.06.30 |
[코드트리] Count 배열 > 나눗셈의 나머지 (0) | 2023.06.30 |