포포's 코딩&일상 기록

10월 1일 일요일 코테 본문

코테

10월 1일 일요일 코테

포포252 2023. 10. 2. 02:26
No. 1

 

 

-  문제 : 연속 부분 수열 일까

https://www.codetree.ai/missions/4/problems/contiguous-array-or-not?&utm_source=clipboard&utm_medium=text 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

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")