띵유로그

[프로그래머스][큐][프린터] 본문

알고리즘

[프로그래머스][큐][프린터]

띵유 2020. 8. 23. 14:17
반응형

내 풀이

def solution(priorities, location):
    answer = 0
    print_list=[]

    for i in range(len(priorities)):
        print_list.append((priorities[i], i))
    cnt=0
    while len(print_list)!=0 :
        job=print_list.pop(0)
        if len(print_list)!=0 and job[0] >= max(print_list)[0]:
            cnt=cnt+1
            if job[1]==location:
                answer=cnt
                break
        elif len(print_list)==0:
            cnt=cnt+1
            answer=cnt
            break
        else:
            print_list.append(job)

    return answer

그냥 머릿속에 생각나는 그대로를 구현하면 된다.

1. 제일 앞에서 하나를 뻄 (pop)

2. 뺸것이 최댓값이면 출력함(cnt=cnt+1)

2-1. 마지막 원소면 max(print_list)에서 오류가 나므로 따로 뺴주었다. (elif)

3. 이때 내가 구하려던 인쇄물이면 answer 이된다. (if job[1]==location)

4. 우선순위가 더 높은게 있다면 다시 뒤로 넣어줌

 

=> 정리 : 우선순위가 가장 높으면 프린트한다. 프린트 할때마다 내가 구하려던 인쇄물인지 check 한다.

 


다른사람 풀이)

1. enumerate를 이용

      print_list = [(i,p) for i,p in enumerate(priorities)]

2. dequeue를 사용
-> pop(0)을 하면 모든 원소를 다시 앞으로 땡겨주어야 하기 때문에 O(n)만큼 소요.
    deque의 popleft()함수를 사용하는것이 더 효율적

    from collections import deque

 

3. 커서를 이용한 풀이
   결국 return 해야하는것은 내가 찾는 인쇄물의 출력 순서이다. 다른 출력물은 신경 쓸 필요가 없으므로 그냥 cursor로 순회하면서 출력된것은 0 으로 바꿔준다. 내껄 출력할때까지 리스트를 순회하면 된다.
(리스트 뒤에 다시 넣는것 = cursor를 통해 순회하는 것)
배워야겠다...전혀 생각하지 못했다.

def solution(priorities, location):
    jobs = len(priorities)
    answer = 0
    cursor = 0
    while True:
        if max(priorities) == priorities[cursor%jobs]:
            priorities[cursor%jobs] = 0
            answer += 1
            if cursor%jobs == location:
                break
        cursor += 1   
    return answer

 

반응형

'알고리즘' 카테고리의 다른 글

[프로그래머스][정렬]K번째 수  (0) 2020.08.24
[프로그래머스][힙]더맵게  (0) 2020.08.23
[프로그래머스][스택][기능개발]  (0) 2020.08.16
[프로그래머스][해시][위장]  (0) 2020.08.04
[백준1874] 스택 수열  (0) 2019.08.03
Comments