PS/프로그래머스

[Python] 프로세스

s_omi 2024. 12. 10. 09:38
728x90
반응형
SMALL

✏️ 문제

 

문제 파악

priorities 배열 내의 값이 같아도 다 다른 프로세스이므로 값으로 구분하면 안되고 위치로 구분해야 한다. 

그래서 딕셔너리를 사용해 { 인덱스 : 값 } 으로 주었고 location과 인덱스가 같으면 반복문을 그만 돌도록 코드를 짰다.

 

우선순위가 높은 프로세스부터 실행되기 때문에

만약 딕셔너리의 값 중 최대값(max)인데

  1. 딕셔너리의 인덱스 == location 이라면 프로세스 실행 변수 출력
  2. 딕셔너리의 인덱스 != location 이라면 딕셔너리 값 = -1, 프로세스 실행 변수 +1

로 하여 반복문을 돌리도록 하였다.

 

 

코드

def solution(priorities, location):
    cnt = 1
    dic = {}
    
    for i, p in enumerate(priorities):
        dic[i] = p

    while cnt != len(dic) - 1:
        for d in dic:
            if max(dic.values()) == dic[d]:
                if d == location:
                    return cnt
                else:
                    dic[d] = -1
                    cnt += 1
    return cnt
  • 다른 사람의 풀이
def solution(p, l):
    ans = 0
    m = max(p)
    
    while True:
        v = p.pop(0)
        
        if m == v:
            ans += 1
            
            if l == 0:
                break
            else:
                l -= 1
                
            m = max(p)
        else:
            p.append(v)
            
            if l == 0:
                l = len(p)-1
            else:
                l -= 1
                
    return ans

 

큐를 사용해서 푸는 정석 코드인데 문제 분석은 나랑 비슷하게 한 거 같다. 

while 반복문을 돌면서 pop해서 꺼낸 값이 최대값이면 실행 변수 +1 해주고

  해당 값의 위치를 확인하고 위치가 같으면 실행 변수 출력,  

  해당 값의 위치를 확인하고 위치가 다르면 pop해서 값을 꺼냈으므로 위치를 -1 해준다.

최대값이 아니면 실행 변수 +1을 해주지 않고 위치를 비교하여 구하는 값인지 아닌지를 구분한다.

728x90
반응형
LIST

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

[Python] 전화번호 목록  (0) 2024.12.11
[Python] 피로도  (0) 2024.12.10
[Python] 의상  (1) 2024.12.09
[Python] n^2 배열 자르기  (0) 2024.12.09
[Python] 카펫  (1) 2024.11.08