본문 바로가기
알고리즘/Problem Solving

프로그래머스 - 기능개발

by 도툐리 2024. 2. 19.

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

댓글