문제
풀이
import sys
test_cases = int(sys.stdin.readline())
for i in range(test_cases) :
n, m = map(int, sys.stdin.readline().split())
important = list(map(int, sys.stdin.readline().split()))
array = [0]*n
array[m] = 'target'
order = 0
while True :
if important[0] == max(important) :
order += 1
if array[0] == 'target' :
print(order)
break;
else :
array.pop(0)
important.pop(0)
else :
important.append(important.pop(0))
array.append(array.pop(0))
리뷰
자료 구조를 잘 몰라서 손도 못댔던 문제..
사실 풀이 자체를 다른 분의 풀이를 참고해서 작성한 건데
pop을 활용하는 부분이 굉장히 신기했다.
max 함수를 쓴다던가 배열을 새로 만들어서
찾는 값이 아닌 경우 넘긴다던가 하는 로직 자체는 생각했는데
그 찾은 값의 인덱스를 어떤 식으로 가져와야 하나가 고민이 많았다.
'1, 2, 3, 4'의 경우 해당 중요도가 다 다른 숫자라 인덱스가 고유하지만
중요도가 중복되는 경우, 예를 들어, '1, 1, 9, 1'인 경우
1의 인덱스를 각각 구별해줄 방법을 찾아야 한다고 생각하고 문제를 접근했는데
찾고자 하는 인덱스에 특별한 값을 부여하고 그 값에 도달할 때까지
1을 더하는 방식으로 문제에 접근할 수 있다는 것에 또 하나 배웠다..
문제를 푸는 사람이 어떤 방식에 익숙한지
어떻게 접근하는지에 따라 풀이 방식이 달라질 수 있어서
이런 알고리즘이 구현 알고리즘인가보다..
구현 알고리즘을 잘 풀려면
코테에 사용해도 되는 주요 라이브러리에 친숙해져야만 할 것 같다.👶😭
'내가 공부하려고 올리는 > 알고리즘' 카테고리의 다른 글
백준 구현 알고리즘 - 11866번(파이썬) (0) | 2022.05.11 |
---|---|
백준 구현 알고리즘 - 11723번(파이썬) (0) | 2022.05.11 |
백준 알고리즘 - 그리디 알고리즘(1931번/1026번/1541번/2217번/13305번/10610번) (0) | 2022.04.25 |
모두를 위한 컴퓨터 과학(CS50) - 정렬 알고리즘 (0) | 2022.04.23 |
모두를 위한 컴퓨터 과학(CS50) - 검색 알고리즘 (0) | 2022.04.21 |
댓글