chyam

[프로그래머스 Lv2,python]- 프로세스 본문

프로그래머스/LV2

[프로그래머스 Lv2,python]- 프로세스

chyam_eun 2025. 1. 12. 16:20

 

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(pri, location):
    len_p=len(pri) 
    li=[a for a in range(len_p)] # 순서 인덱스 저장
    comp=0 # 비교할 인덱스 저장
    if(len_p==1): # 길이 1이면 바로 리턴
        return 1
    while(1):
        sort_pri=sorted(pri,reverse=True) # 역순으로 정렬한것
        if sort_pri==pri: # 이것과 같으면 종료
            break
        comp+=1 
        if comp>=len_p: # 기준이 길이 이상이면 다시 1로 바꿔줌
            comp=1
        if (pri[0]<pri[comp]): # 숫자가 기준보다 큰게 있으면
            li.append(li[0]) # 빼서 뒤에 추가함
            li=li[1:]
            pri.append(pri[0])
            pri=pri[1:]
            comp=0 # 다시 초기화
    return li.index(location)+1

처음에 내 코드는 2개 빼고 다 시간초과가 떠서 수정해야했다.

아래는 수정해서 통과한 코드이다.

def solution(pri, location):
    queue = [(priority, idx) for idx, priority in enumerate(pri)] # [우선순위, 순서인덱스] 형태로 저장함
    num=0 # 최종적으로 몇번째인지
    k=0 # 제거하거나 추가를 알수있는 값
    while(len(queue)>0): # 큐의 길이가 0보다 클때동안
        tmp=queue[0] # 기준 큐
        for i in queue[1:]: # 나머지큐
            if tmp[0]<i[0]: # 기준의 우선순위가 더 낮으면
                queue.append(queue.pop(0)) # 제거하고 추가
                k=1 # 바꼈다는걸 알려줌
                break
            else:
                k=0
        if(k==0): # 안바꼈을때는 첫번째 큐의 우선순위가 가장높다는것
            queue.pop(0) # 제거해줌
            num+=1
            if location==tmp[1]: # 찾는 location과 같으면
                return num # 몇번째인지

아래는 다른분의 풀이이다. 먼저 처음 큐를 제거해주고 난 뒤

any라는걸 사용하였는데 이것은 괄호 안의 값 중 하나라도 True가 있으면 실행되는 것이다. 

어짜피 기준보다 크던 작던 큐를 제거해줘야해서 미리 제거해주는 것은 좋은 것 같다.

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