Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩로그

프로그래머스 | 스택, 큐 - 기능개발 (python) 본문

코딩로그/알고리즘 공부

프로그래머스 | 스택, 큐 - 기능개발 (python)

hyeonnny 2024. 11. 7. 15:27

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

🔅 문제 접근

각 프로세스당 개발을 위해 몇일이 필요한지를 알아보고, 7, 3, 9 이런 식의 배열이 있다면 7, 7, 9 이렇게 조정해 앞의 작업이 끝나지 않으면 뒤의 작업도 함께 기다리도록 한다.

 

배열의 개수가 100개 이하이기 때문에, 전체 배열을 한번씩 순회하는 방식으로 알고리즘을 구성하면 O(n) 내에서 충분히 풀이가 가능할 것이라고 판단하였다.

🔅 문제 풀이

def calc_day(p, s):
    return (100-p)//s if (100-p)%s == 0 else (100-p)//s + 1
    
def solution(progresses, speeds):
    answer = []
    max_day = -1
    count = 0
    
    for p, s in zip(progresses, speeds):
        day = calc_day(p, s)
        
        # 첫번째 값의 경우 비교 가능한 값이 없으므로 일단 max 값만 갱신
        if max_day == -1:
            max_day = day
        
        if day > max_day:
            answer.append(count)
            count = 0
            max_day = day
        
        count += 1
        
    answer.append(count)
    
    return answer

 

상단과 같이 문제를 풀었다. calc_day 함수를 이용해서 잔여 일수를 계산하였으며, 현재 값이 이전의 최댓값보다 클 경우 배열에 count 값을 추가한다.

🔅 배운점 및 느낀점

어려운 문제는 아니어서 빠르게 풀었다. 다만 문제 풀이 과정에서 count를 증가하는 부분의 위치를 잘못 잡아 살짝 헷갈리기도 했다. 손코딩으로 위치를 먼저 잡고 코딩을 하면 보다 명확하고 빠르게 문제를 해결할 수 있을 것 같다.