코딩테스트/기타 문제

[연습문제][python]덱-중급

#코딩 공부 2024. 9. 30. 19:03

문제

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]덱(deque)

덱(Deque, Double-Ended Queue)-양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조 = 스택 + 큐 특징- O(1) 시간 복잡도: 덱의 양쪽 끝에서 삽입과 삭제가 이루어지기 때문에, 이 연산들은 상수 시간 복잡도

tildacoding.tistory.com