코테
10월 1일 일요일 코테
포포252
2023. 10. 2. 02:26
No. 1
- 문제 : 연속 부분 수열 일까
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
코드
n1, n2 = map(int,input().split())
A= list(map(int,input().split()))
B= list(map(int,input().split()))
isCon = False
#탐색
i=0
j=0
while i < len(A):
if A[i] == B[j]:
j+=1
if j >= len(B):
isCon= True
break # 중단도 해줘야함..
else:
j=0
i+=1
"""for j in range(n2): #B 의 첫번째 ~ 값이 있는지 확인
for i in range(n1):
if A[i] == B[j]:
break
#다 있다면
isCon = True"""
if isCon :
print('Yes')
else:
print('No')
새롭게 알게된것
while 문으로 풀때 더 쉽다.. .
답지
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")