
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요....
programmers.co.kr
문제 설명
우선 for문으로 개발률과 개발진행상황을 더해서 카운팅했다.
그리고 카운팅 된 것을 바탕으로 새로운 list에 넣은 후, 규칙을 찾아 answer list에 삽입하려고 했는데
잘 안된다.
테스트는 통과했으나.. 채점을 해보면 거의 다 틀렸다고 나온다.
My A (맞왜틀)
def solution(progresses, speeds):
answer = []
list_day = []
mount = 1
# 개발 기간을 카운팅해서 list_day에 삽입
for i in range(len(speeds)):
count_day = 0
while progresses[i]<100:
progresses[i] += speeds[i]
count_day += 1
list_day.append(count_day)
#answer list에 삽입하는 연산
for i in range(len(list_day)-1):
if list_day[i] >= list_day[i+1]:
mount += 1
else:
answer.append(mount)
mount = 1
answer.append(mount)
return answer
음.. 왜 틀렸는지 솔직히 아직도 모르겠지만, 아래에 있는 for문에서 어떤 문제가 있지 않을까 생각한다.
다른 방법으로 접근해보자.
Other A
def solution(progresses, speeds):
answer = []
time = 0
count = 0
while len(progresses)>0:
if(progresses[0] + time*speeds[0])>=100:
progresses.pop(0)
speeds.pop(0)
count += 1
else :
if count>0:
answer.append(count)
count = 0
time+=1
answer.append(count)
return answer
- 앞에서 부터 하나씩 pop을 해줄 것이기 때문에, progresses 의 length를 이용해서 while문을 돈다.
- progresses 와 time*speeds의 값이 100이 되지 않는다면 time을 1씩 증가시킨다. (걸린 일수)
- 만약 위의 값이 100이상이 되었다면 count를 올리고 progresses와 speeds의 값을 하나씩 pop 해준다.
- 여기서 time 이 7이기 이라면 , 매개변수의 다음 인덱스 값이 7*speeds가 100이상을 만족했다면 count는 계속
증가
- 만약 count가 1 이상 집계되었다면 answer list에 count를 넣어주고, count를 0으로 초기화시킨다.
- 마지막에 잡힌 count는 answer에 append 되지 않기 때문에 마지막에 하나를 넣어주면 정답.
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python] 프로그래머스 LV2 - 행렬 테두리 회전하기 (0) | 2022.03.10 |
---|---|
[Python] 프로그래머스 코딩테스트 연습 LV2 - 짝지어 제거하기 (0) | 2022.02.14 |
[Python] 프로그래머스 코딩테스트 연습 LV2 - 더 맵게 (0) | 2022.02.08 |
[Python] 프로그래머스 코딩테스트 LV1 - 완주하지 못한 선수 (0) | 2022.02.08 |
[Java] 프로그래머스 코딩테스트 연습 LV1 - 로또의 최고 순위와 최저 순위 (0) | 2022.02.05 |