728x90
반응형
SMALL
✏️ 문제
문제 파악
priorities 배열 내의 값이 같아도 다 다른 프로세스이므로 값으로 구분하면 안되고 위치로 구분해야 한다.
그래서 딕셔너리를 사용해 { 인덱스 : 값 } 으로 주었고 location과 인덱스가 같으면 반복문을 그만 돌도록 코드를 짰다.
우선순위가 높은 프로세스부터 실행되기 때문에
만약 딕셔너리의 값 중 최대값(max)인데
- 딕셔너리의 인덱스 == location 이라면 프로세스 실행 변수 출력
- 딕셔너리의 인덱스 != 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 |