[문제]
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🎨 풀이
💡 전체 코드
def solution(progresses, speeds):
answer = []
day = []
count = 1
# 1. for문을 이용해 각각 언제 배포 가능해지는 지 append.
for i in range(len(progresses)):
tmp = 100 - progresses[i]
if tmp % speeds[i] == 0:
day.append(tmp//speeds[i])
else :
day.append(tmp//speeds[i]+1)
a = day[0]
# 2. 그 리스트 앞에 숫자보다 뒤에 숫자가 더 작다면 +, 아니라면 append.
for i in range(1,len(day)):
if a >= day[i]:
count += 1
else:
a = day[i]
answer.append(count)
count = 1
answer.append(count)
return answer
> 핵심 : 며칠째에 완성되는 지 각각 day 리스트에 넣어둔 후, 비교해서 배포 날짜 확정짓기
🍦 코드 설명 (실행 순서대로 나열)
#solution
answer = []
day = []
count = 1
1. 변수와 리스트를 초기화한다.
- answer : 정답 (리스트)
- day : 배포 가능해지는 날짜
- count : day 리스트 비교를 위함. (자기를 포함해야 하니까 1로 먼저 설정해둠)
#solution - 각 기능 별로 배포 가능한 날짜 계산
# 1. for문을 이용해 각각 언제 배포 가능해지는 지 append.
for i in range(len(progresses)):
tmp = 100 - progresses[i]
if tmp % speeds[i] == 0:
day.append(tmp//speeds[i])
else :
day.append(tmp//speeds[i]+1)
2. progresses를 이용해 for문을 실행한다.
3. tmp에 100 - progresses[i] 값을 넣는다.
4. 만약 tmp가 speeds[i]로 나누어떨어진다면, tmp//speeds[i] 값을 day에 넣고,
나누어떨어지지 않는다면, tmp//speeds[i] + 1 값을 day에 넣는다.
#solution - 배포 가능 날짜 비교 후, 같은 날짜에 할 수 있는 것끼리 묶어서 answer에 넣기.
a = day[0]
# 2. 그 리스트 앞에 숫자보다 뒤에 숫자가 더 작다면 +, 아니라면 append.
for i in range(1,len(day)):
if a >= day[i]:
count += 1
else:
a = day[i]
answer.append(count)
count = 1
answer.append(count)
return answer
5. 먼저, a에 day[0]을 넣는다.
- 맨 처음이니까 day[0]을 기준으로 잡기 위해 day[0]을 넣어준 것임.
6. 만약, a가 day[i]보다 크다면 count에 1을 더해준다.
- 이 말은 뒤에 있는 거는 같이 배포가 가능하다는 뜻이기 때문에 count에 1을 더해준 것이다.
- 더 쉽게 말하면 그 뒤에 있는 기능은 진작 준비가 되어있었다는 거!
7. 만약, a가 day[i] 보다 작다면!
a에 day[i]를 넣고, answer에 count를 추가하고, count를 1로 다시 초기화한다.
8. answer에 count를 append한다.
- 맨 마지막에 쌓여있던 count를 마지막으로 append 한 것이다.
9. answer을 return한다.

끝~
⭐ 느낀점
> 잘 풀었땀. 다른 사람들 풀이보니까 day 리스트 같은 거 안 만들고 바로바로 한 사람들이 있더라. 너무 신기했다. 막 만족스럽지는 않은데 뭐.. 요정도면 그래도 괜찮았던 것 같다. 굿굿
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 2] 영어 끝말잇기 (파이썬) (0) | 2022.09.24 |
---|---|
[프로그래머스 / Level 2] 카펫 (파이썬) (0) | 2022.09.23 |
[프로그래머스 / Level 2] JadenCase 문자열 만들기 (파이썬) (0) | 2022.09.22 |
[프로그래머스 / Level 2] 피보나치 수 (파이썬) (0) | 2022.09.20 |
[프로그래머스 / Level 2] 숫자의 표현 (파이썬) (0) | 2022.09.19 |