티스토리 뷰

728x90

https://www.acmicpc.net/problem/23253

 

23253번: 자료구조는 정말 최고야

위 그림처럼 책이 쌓여 있으므로, 첫 번째 더미 - 두 번째 더미 - 첫 번째 더미 - 두 번째 더미 순으로 꺼내면 책 번호순으로 나열할 수 있다.

www.acmicpc.net

조건이 복잡하게 적혀있는데 핵심은 스택 자료 구조로 순서대로 숫자를 뽑아낼 수 있는지 확인하는 문제입니다.

스택 자료구조가 가장 끝에 들어온 것이 가장 먼저 나오는 구조(LIFO)인 것을 생각했을 때,

리스트에 가장 끝 값보다 작은 값이 있을 경우 절대 순서대로 뽑을 수 없는 것을 빠르게 파악하여 구현하면 됩니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
N, M = map(int, input().split())
chk = True
for _ in range(M):
    n = int(input())
    lst = list(map(int, input().split()))
    if chk:
        while len(lst) > 0:
            tmp = lst.pop()
            if lst:
                if tmp > lst[-1]:
                    chk = False
                    break
    else:
        break
if chk:
    print('Yes')
else:
    print('No')
cs

 

댓글