https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
현재 진도 progresses 와 진도율 speeds가 주어질 때 배포하는 날에 몇개의 기능을 배포하는지 담아 리턴하는 문제이다.
먼저 배포까지 남은 일수를 모든 progress에 대해 구해준다. 이때 ceil을 사용해 올림처리 한다. (7/3 = 2.33... 이므로 3일만에 처리 가능함)
다음 작업의 배포일까지 남은 일수가 현재 작업보다 크다면, 이때는 지금까지 완료한 기능을 배포할 수 있다는 의미이다.
answer에 담고 count는 초기화한다.
배포할 수 없는 경우, 다음 작업의 값을 현재 값으로 치환하고 count += 1 처리해준다.
마찬가지로 큐를 사용해서도 문제를 풀이할 수 있다. 알고리즘 흐름은 동일하다
from math import *
def solution(progresses, speeds):
daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
count = 1
answer = []
for i in range(len(daysLeft)):
try:
if daysLeft[i] < daysLeft[i+1]:
answer.append(count)
count = 1
else:
daysLeft[i+1] = daysLeft[i]
count += 1
except IndexError:
answer.append(count)
return answer
큐 사용 풀이
from math import *
from collections import deque
def solution(progresses, speeds):
daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
answer = []
q = deque()
q.append(daysLeft[0])
idx = 1
while len(q) != 0:
v = q[0]
try:
if v >= daysLeft[idx]:
q.append(daysLeft[idx])
else:
answer.append(len(q))
q.clear()
q.append(daysLeft[idx])
except Exception:
answer.append(len(q))
break
idx += 1
return answer
'프로그래머스 > Lv.2' 카테고리의 다른 글
[Python] 프로그래머스 프로세스 (0) | 2024.08.08 |
---|---|
[Python] 프로그래머스 올바른 괄호 (0) | 2024.08.07 |
[Python] 프로그래머스 전화번호 목록 (0) | 2024.07.21 |
[Python] 프로그래머스 아날로그 시계 (0) | 2024.06.23 |
[C++] 프로그래머스 테이블 해시 함수 (0) | 2024.05.11 |