[프로그래머스] 스택/큐
기능개발
https://programmers.co.kr/learn/courses/30/lessons/42586
내 풀이
정확성: 100.0
합계: 100.0 / 100.0
def solution(progresses, speeds):
ans = []
release = []
for i in range(len(progresses)):
p = (100 - progresses[i])
r = p // speeds[i]
if p % speeds[i] != 0:
r += 1
release.append(r)
prev = release[0]
cnt = 0
for r in release:
if prev < r:
ans.append(cnt)
prev = r
cnt = 1
else:
cnt += 1
ans.append(cnt)
return ans
잔여 업무를 속도로 나눈 값 = 배포까지 걸리는 시간을 release
에 저장
release
를 보면서 이전 값보다 큰 값이 나오면 그 사이 개수를 ans
에 저장
작은 값들은 cnt + 1
로 카운트
프린터
https://programmers.co.kr/learn/courses/30/lessons/42587
내 풀이
정확성: 100.0
합계: 100.0 / 100.0
def solution(priorities, location):
ans = 1
i = 0
cnt = 0
while priorities:
if priorities[1:] and priorities[0] < max(priorities[1:]):
p = priorities.pop(0)
priorities.append(p)
if location == 0:
location = len(priorities)
else:
if location == 0:
break
priorities.pop(0)
ans += 1
location -= 1
cnt += 1
return ans
priorities
의 첫번째 값만 보면서 이후에 더 큰 값이 있으면 맨 뒤로 붙여줌
=> pop(0) & append(p)
이 때, location
에 해당되는 문서였으면 맨 뒤로 갔으니까
location = len(priorities)
로 update
이후에 더 큰 값이 없다면 출력 확정이니까 pop(0) & 출력 횟수 (ans
) + 1
이 때, location
이 확정되는 거면 이후는 볼 필요가 없으니까 break
다른 사람의 풀이
정확성: 100.0
합계: 100.0 / 100.0
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
queue
에 (인덱스, 우선순위) 로 묶어서 저장
처음 값을 pop 한 후 남은 queue
의 우선순위들 중에 더 높은게 있는지 확인
any()
: 하나라도 True 가 있는지 확인
있으면 다시 queue
에 append
없으면 answer + 1
하고 location
인지 확인
다리를 지나는 트럭
https://programmers.co.kr/learn/courses/30/lessons/42583
내 아이디어
여러대의 트럭이 함께 가는 경우,
맨 앞의 트럭만 len(truck_weights)
만큼 걸리고
함께 가는 트럭들은 1 만큼 걸리는 점을 이용해서
트럭마다 걸리는 시간을 계산하려고 했으나 안됨...ㅎ
ex) 6 3 1 2
같은 경우는 6 이 먼저 도착하고 나서야 2 가 올라갈 수 있음
너무 어렵게 생각한 듯...
다른 사람의 풀이
def solution(bridge_length, weight, truck_weights):
q = [0] * bridge_length
sec = 0
while q:
sec += 1
q.pop(0)
if truck_weights:
if sum(q) + truck_weights[0] <= weight:
q.append(truck_weights.pop(0))
else:
q.append(0)
return sec
q
를 다리라고 생각하고 다리 길이만큼의 리스트 생성
while 문이 돌아가는 동안 sec + 1
& q.pop(0)
현재 트럭이 다리 위에 올라가도 된다면 q
에 append
무게가 안된다면 0 append
반복문이 돌아가면서 실제로 트럭이 지나가듯이 q
가 변화함
주식가격
https://programmers.co.kr/learn/courses/30/lessons/42584
내 풀이
정확성: 66.7
효율성: 33.3
합계: 100.0 / 100.0
def solution(prices):
ans = []
for i in range(len(prices)):
cnt = 0
for j in range(i+1, len(prices)):
cnt += 1
if prices[i] > prices[j]:
break
ans.append(cnt)
return ans
각 숫자마다 자기 자신 이후에 자신보다 작은 값이 나올때까지 cnt + 1
작은 값이 나오거나 끝까지 다 봤으면 ans
에 append
Author And Source
이 문제에 관하여([프로그래머스] 스택/큐), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsh5408/프로그래머스-스택큐저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)