코딩 테스트/프로그래머스

Lv2. 프로세스

  • -
728x90
반응형

문제 보기 :  프로세스

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


문제

  • 정답률 : 63%


작성 코드

from collections import deque
def solution(priorities, location):
    answer = 0
    pr = [str(i) for i in range(1,len(priorities)+1)] # ["1","2","3","4"]
    p = pr[location] #"3"
    priorities = deque(priorities) ; pr = deque(pr)
    
    while True:
        m = max(priorities) #3
        while m in priorities: # 3 in [2,1,3,2]
            order = priorities.popleft() #2 [1, 3, 2]
            who = pr.popleft() #"1" ["2","3","4"]
            if m != order: #3 != 2
                priorities.append(order) ##[1,3,2,2]
                pr.append(who) #["2","3","4","1"]
            else:
                answer += 1
                if who == p:
                    return answer
    return answer

풀이

엄청 헷갈리는 문제였다.

우선 순위는 높은대로 뽑되, 처음 리스트의 location번째 자리에 위치했던 값이 언제 출력되는지를 알아야하기에 초반에 변수를 설정해두는게 중요하다고 생각했다.

예제처럼 알파벳으로 설정할까 했지만, priorities가 100까지 가능해서 문자열인 숫자로 대체했다. (그래서 더 복잡함;)

p를 찾아야할 값으로 두고, m은 항상 priorities의 max값이다.
만약 m이 priorities에 더이상 없다면 다음 max를 구하는 이중 while을 작성했다.

이 외의 알고리즘은 코드만 읽어봐도 이해되는 구조라 설명을 생략한다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv2. 롤케이크 자르기  (0) 2024.08.23
Lv1. 소수 찾기  (0) 2024.08.08
Lv0. 연속된 수의 합  (0) 2024.08.06
Lv2. [1차] 캐시  (0) 2024.08.02
Lv2. H-Index  (0) 2024.08.01
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.