https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[풀이1] 내 풀이 1
from collections import deque
def solution(progresses, speeds):
answer = []
# 먼저 배포되어야 하는 순서가 있으므로, queue를 써야함을 예상해볼 수 있다.
work = deque()
for num,speed in zip(progresses,speeds):
work.append((100-num, speed)) # 잔여 진도, 해당 작업 속도 -> tuple
feature_num = 0
day = 1
while len(work) != 0:
left_over, speed = work[0]
left_over -= speed*day
if (left_over<=0): # 현재 작업 끝
work.popleft()
feature_num+=1
else: # 현재 작업 아직 끝 X
if (feature_num>0): # 기존 작업 된거 있으면 배포 ㄱㄱ
answer.append(feature_num)
feature_num = 0
day+=1
answer.append(feature_num)
return answer
- 불필요하게 복잡해진듯한 기묘한 느낌쓰.
- day에 따라 +가 1씩 이루어짐. 즉, 총 개발 일수만큼 loop을 돌아야함.
- O(n)
[풀이2] 남의 풀이 보고 다시 발전 시켜본 내 풀이 2 (daysLeft 기반)
def solution(progresses, speeds):
answer = []
days_left = []
for (progress, speed) in zip(progresses, speeds):
days_left.append(ceil((100-progress)/speed))
feat_cnt = 0
while days_left:
feat_cnt+=1
# (1) base case
if len(days_left)==1:
answer.append(feat_cnt)
# (2) 일반 case
elif days_left[0]<days_left[1]: # 오름차순인 경우 (배포 주기 끊김)
answer.append(feat_cnt)
feat_cnt=0
days_left.pop(0)
return answer
- 풀이 1에 비해 달라진 점 :
- 개발 일수만큼 loop을 도는게 아니라 피처 갯수 (= len(progresses) = len(speeds) 만큼 loop을 돎
깨달음
'알고리즘 > Problem Solving' 카테고리의 다른 글
프로그래머스 - 올바른 괄호 (0) | 2024.02.20 |
---|---|
프로그래머스 - 의상 (1) | 2024.02.18 |
오늘 문제풀이 하면서 깨달은 점 (0) | 2024.02.18 |
프로그래머스 - 전화번호목록 (1) | 2024.02.17 |
(Day1) Hash (0) | 2024.02.17 |
댓글