2023년 1월 1일에 작성됨
https://www.acmicpc.net/problem/23253
23253번: 자료구조는 정말 최고야
위 그림처럼 책이 쌓여 있으므로, 첫 번째 더미 - 두 번째 더미 - 첫 번째 더미 - 두 번째 더미 순으로 꺼내면 책 번호순으로 나열할 수 있다.
www.acmicpc.net
문제 분석
더미의 교과서 번호가 하나라도 역순이 되는 경우 False가 된다.
입력받은 번호는 더미의 밑에서부터 차례대로 나타낸 것이기 때문에 만약 한 구간이라도 오름차순이 된다면 교과서를 순서대로 꺼낼 수 없으므로 No를 출력한다.
소스 코드 (⭕)
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
check = True
for _ in range(m):
i = int(input())
k = list(map(int, input().split()))
for j in range(i-1):
if k[j] < k[j+1]:
check = False
break
if not check:
break
print('Yes' if check else 'No')
코드 분석
1. 빠른 입력을 사용하지 않으니 시간초과가 나서 sys모듈로 빠른 입력으로 받아준다.
2. 교과서의 수 n과 교과서 더미의 수 m을 입력받는다.
3. m만큼의 더미에 쌓인 교과서의 수 i를 입력받고, i개의 교과서 번호를 k에 리스트 형태로 입력받는다.
4. k의 현재 인덱스의 값이 다음 인덱스의 값보다 작으면 내림차순이 아니므로 check 변수를 False로 바꿔주고 반복문을 빠져나온다.
5. 만약, 끝까지 check가 True이면 ‘Yes’를 출력하고 False이면 ‘No’를 출력한다.
end
더미가 여러개면 각각 따로 계산해줘야 하는건가 싶었는데 더미의 개수랑 상관없이 모두 리스트에 넣고 하나라도 순서가 어긋나면 no가 되는 식으로 풀 수 있었다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_2999 : 비밀 이메일 (2) | 2023.11.12 |
---|---|
[Python]백준_2909 : 캔디 구매 (0) | 2023.11.12 |
[Python]백준_5426 : 비밀 편지 (0) | 2023.11.10 |
[Python]백준_5211 : 가단조와 다장조 (4) | 2023.11.10 |
[Python]백준_5566 : 주사위 게임 (0) | 2023.11.10 |