문제
1부터 N까지 수가 쓰여져 있는 N장의 카드 더미가 주어집니다. 이 카드 더미에서 맨 위 또는 맨 아래에 있는 카드를 내려놓는 것을 반복해서, 1부터 N까지 차례대로 내려놓을 수 있는지 알려주는 프로그램을 작성해 주세요.
#입력
5
1 4 3 5 2
#출력
NO
#입력
5
1 4 5 3 2
#출력
YES
카드 더미에서 맨 위 또는 맨 아래에 있는 카드를 내려놓는 것을 반복해서, 1이 쓰여있는 카드부터 N이 쓰여 있는 카드까지 차례대로 내려놓을 수 있으면 YES, 그렇지 않으면 NO를 출력
[python]문제풀이
1부터 N까지 순서대로 놓아야한다.
ex) N=5 일때, 카드 더미가 1,2,3,4,5 로 나열될 수 있는지.
맨 앞과 맨뒤가 1인지 체크
-> 맞으면 카드 더미 맨 앞 카드 삭제-> 맨 앞과 맨뒤 카드가 2인지 체크 -> 맞으면 또 앞에 카드 삭제 , 틀리면 NO-> 반복
-> 틀리면 -> print('NO')
from collections import deque
#카드개수
N=int(input())
#카드 더미
cards = list(map(int,input().split()))
#덱
dq = deque(cards)
#1부터 순서대로 체크
chk =1
while dq:
if dq[0]==chk:#카드 더미 맨 앞 카드 숫자 체크
dq.popleft() #맨 앞 카드 제거
chk +=1
elif dq[-1]==chk: #카드 더미 맨 뒤 카드 숫자 체크
dq.pop() #맨 뒤 카드 제거
chk +=1 #다음 숫자체크하기
else:
print('NO')
break #NO 출력 후 루프 종료
else:
print('YES')
#결과 출력
+) 참고 : 덱
'코딩테스트 > 기타 문제' 카테고리의 다른 글
[연습문제][python]최대공약수 (1) | 2024.10.07 |
---|