내가 공부하려고 올리는/알고리즘

백준 구현 알고리즘 - 1966번(파이썬)

결딴력 2022. 5. 11. 16:29
반응형

문제

 

풀이

더보기

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을 더하는 방식으로 문제에 접근할 수 있다는 것에 또 하나 배웠다..

문제를 푸는 사람이 어떤 방식에 익숙한지

어떻게 접근하는지에 따라 풀이 방식이 달라질 수 있어서

이런 알고리즘이 구현 알고리즘인가보다..

 

구현 알고리즘을 잘 풀려면

코테에 사용해도 되는 주요 라이브러리에 친숙해져야만 할 것 같다.👶😭

 

 

반응형