알고리즘/프로그래머스

[스택/큐] 다리를 지나는 트럭 / 프린터

래울 2021. 10. 3. 14:07

https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

 

- 문제의 상황을 코드로 잘 표현하면, 해결가능하다.

def solution(bridge_length, weight, truck_weights):
    time = 0
    queue = [0] * bridge_length #다리길이 만큼의 queue, 비어있으면 0
    while queue:
        time += 1
        queue.pop(0) #다리 맨앞을 pop
        if truck_weights:
            if sum(queue) + truck_weights[0] <= weight: #만약 다음트럭이 건널 수 있으면
                queue.append(truck_weights.pop(0))
            else:   
                queue.append(0)
    return time

 

 


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

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

- plist : 인덱스를 key로, 우선순위를 value로 하는 딕셔너리 리스트

[2, 1, 3, 2] [{0: 2}, {1: 1}, {2: 3}, {3: 2}]

- 맨 앞의 문서의 우선순위가 뒤의 다른문서들보다 우선순위가 낮으면 check=0, plist의 맨뒤에 추가,

  만약 맨 앞의 문서의 우선순위가 뒤의 다른문서들보다 우선순위가 높으면, check=1

- check가 1이라면, answer를 1증가시키고, 해당 문서가 location의 문서라면 return answer

- return answer + 1 는  맨마지막 출력되는 경우

 

def solution(priorities, location):
    answer = 0
    plist = [{i: priorities[i]} for i in range(len(priorities))]
    while plist:
        check = 0
        temp = plist.pop(0)
        for i in plist:
            if list(i.values())[0] > list(temp.values())[0]:
                check = 0
                plist.append(temp)
                break
            check = 1
        if check == 1:
            answer += 1
            if list(temp.keys())[0] == location:
                return answer
    return answer + 1