문제
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100% 일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
입력 & 출력
입출력 예
progressesspeedsreturn
[93, 30, 55] | [1, 30, 5] | [2, 1] |
[95, 90, 99, 99, 80, 99] | [1, 1, 1, 1, 1, 1] | [1, 3, 2] |
풀이 과정
처음 문제를 분석하고 풀어내려고 할때는 당연히 leftpop을 사용하는 방식이어야 된다고 생각하여서 deque를 이용한 방식(코드2)으로 풀이를 하였지만 해당 방법으로 풀이가 되지 않아서 풀이방법을 바꾸었다.
1. 처음부터 문제를 보면서 pop을 이용하는 방식으로 처리해야 되는 것을 확인했다.
2. while문으로 처리하지만 각각의 반복에서는 progresses에 있는 숫자를 speeds에 맞게 증가시키면서 숫자들을 비교한다.
3. 연속으로 증가한 숫자의 크기가 100이 넘었을 경우에는 해당 숫자를 pop 해서 없애면서 cnt를 증가시키고 cnt값을 append 하여 배열에 저장하여 원하는 출력 값을 만들어준다.
4. 만약 cnt값이 0이라고 하면 answer에는 아무것도 붙이지 않으며 결과값을 확정한다.
코드
코드1
def solution(progresses, speeds):
answer = []
while progresses:
for i in range(len(progresses)):
progresses[i] += speeds[i]
cnt = 0
while progresses and progresses[0] >= 100:
progresses.pop(0)
speeds.pop(0)
cnt +=1
if cnt >0:
answer.append(cnt)
return answer
코드2
# def solution(progresses, speeds):
# answer = []
# for i, progress in enumerate(progresses):
# print(progress)
# print("@@@@@@@@@@@")
# time = (100 - progress / speeds[i])
# count = 0
# for j, progress2 in enumerate(progresses, start=i + 1):
# # print(progress2)
# if (100 - progress2) / speeds[j] < time:
# count += 1
# else:
# break
#
# count += 1
# i += count
#
# answer.append(count)
#
# return answer
from collections import deque
answer = []
progresses = [93, 30, 55]
speeds = [1, 30, 5]
for i in range(len(progresses)):
count = 0
multiply = (100 - progresses[i]) / speeds[i]
print(f"1 : {deque(progresses).popleft()}")
count += 1
for j in range(len(progresses)):
comp = progresses[j] + multiply * (100 - progresses[j])
if 100 <= comp:
count += 1
print(f"2 : {deque(progresses).popleft()}")
else:
break
answer.append(count)
print(progresses)
print(answer)
# print(solution(progresses, speeds))
'Algorithm' 카테고리의 다른 글
[프로그래머스] 코딩테스트 연습힙(Heap)더 맵게 (0) | 2022.07.02 |
---|---|
[프로그래머스] 코딩테스트 연습월간 코드 챌린지 시즌3 없는 숫자 더하기 (0) | 2022.06.29 |
[프로그래머스] 코딩테스트 연습2021 카카오 채용연계형 인턴십숫자 문자열과 영단어 (0) | 2022.06.27 |
[백준_2908] 상수 (0) | 2022.06.26 |
[프로그래머스] 코딩테스트 연습Summer/Winter Coding(2019)멀쩡한 사각형 (0) | 2022.06.25 |