알고리즘/프로그래머스
[스택/큐] 다리를 지나는 트럭 / 프린터
래울
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