https://school.programmers.co.kr/learn/courses/30/lessons/42586
Solution
def solution(progresses, speeds):
answer = []
progresses = progresses[::-1]
speeds = speeds [::-1]
print(progresses, speeds)
while True:
if progresses == []:
break
for i in range(len(progresses)):
progresses[i] += speeds[i]
count =0
while True:
if progresses == []:
break
if progresses[-1] >=100:
progresses.pop()
count +=1
else:
break
if count !=0 :
answer.append(count)
return answer
이 문제는 작업의 진도와 개발 속도가 주어졌을 때, 각 배포마다 몇 개의 기능이 배포되는지를 구하는 문제입니다. 작업의 개수는 최대 100개이며, 작업 진도와 속도는 자연수로 주어집니다.
주어진 배열을 순회하면서 각 작업의 배포일을 계산하고, 배포일이 현재 배포일보다 큰 작업들을 함께 배포하는 방식으로 접근할 수 있습니다. 배포일을 비교하여 작업을 함께 배포할지 여부를 결정하고, 배포마다 배포되는 기능의 수를 세어 결과를 반환하면 됩니다.
progresses와 speeds 배열을 [::-1]로 변경하여 마지막 작업부터 처리하도록 설정하고, 하나의 스택으로 놓고 문제를 푸니까 수월하게 풀렸습니다.
Attempt (parameter +=1)
def solution(progresses, speeds):
answer = []
print('here')
day=1
parameter = 0
breaker = True
while breaker:
r = 0
print("progresses", progresses, "parameter", parameter, "len progresses", len(progresses))
if parameter == len(progresses)-1:
break
for i in range(len(progresses)):
progresses[i] += speeds[i]
if progresses[parameter] >= 100:
parameter +=1
r+=1
print('progresses', progresses, "parameter", parameter)
while True:
if len(progresses) <= parameter:
break
if progresses[parameter] >= 100:
r+=1
day+=1
return answer
print(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]))
처음엔 하나의 스택으로 생각하지 않고, parameter라는 변수를 두어, 각 문항이 100이상일 시, parameter를 하나씩 증가시켜가며 다음 값을 계산하려고 했는데, 위 스택으로 푼 것보다 훨씬 복잡하고 인덱스 에러가 많이 나는 것을 볼 수 있습니다. 다음부터 이런 문제를 보면 스택 구조로 풀면 간단하다는 것을 캐치하고 잘 풀어야할듯 합니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
코딩테스트 연습 해시 전화번호 목록 (0) | 2023.07.09 |
---|---|
코딩테스트 연습2018 KAKAO BLIND RECRUITMENT[1차] 뉴스 클러스터링 (0) | 2023.07.08 |
코딩테스트 연습 스택/큐 프로세스 (0) | 2023.07.08 |
코딩테스트 연습 연습문제 할인 행사 (0) | 2023.07.07 |
코딩테스트 연습 2018 KAKAO BLIND RECRUITMENT[1차] 캐시 (0) | 2023.07.07 |