코딩로그
프로그래머스 | 스택, 큐 - 기능개발 (python) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42586
🔅 문제 접근
각 프로세스당 개발을 위해 몇일이 필요한지를 알아보고, 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를 증가하는 부분의 위치를 잘못 잡아 살짝 헷갈리기도 했다. 손코딩으로 위치를 먼저 잡고 코딩을 하면 보다 명확하고 빠르게 문제를 해결할 수 있을 것 같다.
'코딩로그 > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 | 스택, 큐 - 다리를 지나는 트럭 (python) (1) | 2024.11.09 |
---|---|
프로그래머스 | 해시 - 베스트앨범 (python) (0) | 2024.11.06 |
프로그래머스 | 해시 - 폰켓몬, 완주하지 못한 선수, 전화번호 목록 (5) | 2024.11.05 |
프로그래머스 | 해시 - 의상 (python) (0) | 2024.11.04 |