일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 디자인패턴
- 백준 2003
- 백준
- 정처기
- 취뽀
- 정보처리기사
- 파이썬
- 개발자
- 코테
- dfs
- SSAFY
- 13기
- 삼성청년SW아카데미
- 우테코
- 프리코스
- 코딩테스트
- 비전공자
- SWEA
- 삼성 청년 sw아카데미
- 마이스터고
- 우테코 7기
- 코딩
- 삼성 부트캠프
- 싸피
- 우테코 프리코스
- 부트캠프
- 삼성
- 싸피 13기
- UML
- 삼성 청년 SW 아카데미
Archives
- Today
- Total
룰루코딩
백준 1966 프린터 큐 본문
문제
솔루션
T = int(input())
for _ in range(T):
n,m = map(int,input().split())
stack = list(map(int,input().split()))
result = 1
while stack:
if stack[0] < max(stack):
stack.append(stack.pop(0))
else:
if m==0:
break
stack.pop(0)
result+=1
m = m -1 if m>0 else len(stack) -1
print(result)
깨달은 점
처음에 문제가 제대로 이해가지 않았는데
맨처음 테스트케이스 수를 입력한후
n,m 에 총 문서개수와 궁금한 문서의 인덱스이고
그다음줄에 중요도이다.
예를 들면
4 2
1 2 3 4
일때 총 4개의 문서 중 2번째 문서가 몇번째로 인쇄되는지를 출력해야한다.
중요도는 1234로 2번째문서는 2번째로 인쇄된다.
코드 설명
while stack:
스택이 빌때까지 계속 반복하여 과정 진행
if stack[0] < max(stack):
stack.append(stack.pop(0))
stack[0]은 현재 인쇄 대기열의 첫 번째 문서이다.
stack[0]이 stack 내에서 가장 높은 우선순위가 아니라면(다른 문서들이 더 높은 우선순위라면)
첫 번째 문서를 pop하여 맨 뒤로 보낸다. ->우선순위가 높은 문서가 먼저 인쇄되도록
else:
if m==0:
break
stack[0]이 가장 높은 우선순위인 경우
-> 현재 문서가 목표 문서(m == 0)라면 반복문을 종료
stack.pop(0)
result+=1
목표 문서가 아니라면 현재 문서를 인쇄(pop(0))하고ㅡ 인쇄된 문서 개수(result)를 증가시킴
m = m -1 if m>0 else len(stack) -1
m은 목표 문서의 위치, 문서가 한 칸 앞으로 이동할 때마다 m을 업데이트
목표 문서가 0번째에 있을 경우(m == 0), m을 len(stack) - 1로 설정하여 목표 문서가 맨 뒤로 이동
'백준' 카테고리의 다른 글
백준 1874 스택 수열 (0) | 2024.10.27 |
---|---|
백준 4949 균형잡힌 세상 (0) | 2024.10.27 |
백준 18258 큐2 (0) | 2024.10.26 |
백준 28278 스택2 (0) | 2024.10.14 |
백준 2231 분해합 (2) | 2024.10.12 |