유형 : 스택, 그리디
[예시]
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
[출력]
1
2
5
예시를 통해 문제를 이해해보자.
테스트 케이스 개수가 3개인데 여기서 2번째, 3번째만 살펴보겠다.
1) 2번째 케이스
2) 3번째 케이스
풀이
test_case = int(input())
for _ in range(test_case):
n, m = list(map(int, input().split(' ')))
queue = list(map(int, input().split(' ')))
queue = [(i,idx) for idx, i in enumerate(queue)] # (중요도, 인덱스)
count = 0
while True:
if queue[0][0] == max(queue, key=lambda x:x[0])[0]: # 큐에서 첫번째 원소의 중요도가 가장 큰 중요도라면
count += 1
if queue[0][1] == m: # 구해야하는 문서가 맞다면
print(count)
break
else:
queue.pop(0) # 구해야하는 문서가 아니면 출력만 하고 다음으로 넘어감
else:
queue.append(queue.pop(0)) # 중요도가 가장 크지 않다면 큐의 뒤로 보내줌
처음에 문제를 이해하지 못해서 바로 못 풀었다...
이해하고 나니 문제에서 요구하는 대로 구현하면 쉽게 풀리는 듯하다.. 못해서 문제지..
** max 함수의 key 사용 (링크)
- 백준 링크 https://www.acmicpc.net/problem/1966
- 출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 올인원 패키지 Online
반응형
'Python' 카테고리의 다른 글
[자료구조] 해쉬 테이블 (0) | 2021.12.13 |
---|---|
[백준] 5397번 : 키로거 (0) | 2021.12.11 |
[백준] 11399번 : ATM (0) | 2021.12.09 |
[알고리즘] 탐욕(그리디) 알고리즘 (0) | 2021.12.09 |
[자료구조] 큐(Queue) 정리 (0) | 2021.12.09 |
댓글