출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

프로그래머스 Level 2 문제들 중 지금까지 푼 것들 중에서는 가장 쉽게 풀렸던 문제인 것 같다.

def solution(priorities, location):
    count = 0
    priority_list = []
    for index, item in enumerate(priorities):
        priority_list.append([item, index])
    target = priority_list[location]
    while True:
        if priority_list[0][0]!= max(priority_list)[0]:
            priority_list.append(priority_list.pop(0))
        else:
            if priority_list[0] == target:
                count += 1
                return count
            else:
                count += 1
                del priority_list[0]
  • 우선 중요했던 것은 location에 주어진 priorities의 숫자를 어떻게 똑같은 다른 숫자들과 비교할 수 있을 것인가였는데, 이는 enumerate() 함수를 사용하여 해결할 수 있었다.
  • 다음으로는 targetenumerate()함수를 사용하여 새로 만든 priority_list 라는 배열에서 정의를 해주었다.
  • 다음으로는 while문으로 체크를 시작해줬는데, priority_list의 요소의 첫번째 요소가 priority_list의 가장 큰 요소의 첫번째 요소와 같지 않다면, 그 요소는 뒤로 보내주고 앞에서 삭제시켜줬다.
  • 만약 같았다면, 그 요소가 우리가 미리 정의해준 target과 일치하는지 보고, 일치한다면 count 에 1을 더한 값을 되돌려준다.
  • 만약 같지 않다면, 단순히 count에 1을 더해주고, 그 priority_list[0] 요소를 삭제해준다.

비교적 쉽게 풀었는데, 다른 사람의 풀이를 잠깐 보도록 하자


다른 사람의 풀이

다음은 프로그래머스에서 가장 많은 좋아요를 받은 문제 풀이이다.

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer

여기서 주목할만한 점은 중간의 any 함수이다. any함수는 전달받은 자료형의 element 중 하나라도 True일 경우 True를 돌려준다. 즉, 여기서 cur[1]보다 q[1] 인 수가 queue에 있다면, True를 돌려주고, cur값을 queue에 다시 추가해주는 작업을 한다. 기본적으로 푸는 논리는 나의 풀이와 비슷했다고 볼 수 있다.