1️⃣ 문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다.
각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고,
이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와
각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때
각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
2️⃣ 풀이 전 계획과 생각
🤔 고민
처음, 일일히 speed를 추가해주었는데,
반복문이 너무 많이 돌려지고, 복잡하다.
반복하는 행위를 정의하고 규칙을 찾자.
→ 기능의 연산을 정의해주어, 반복문을 줄이자. progresses[i] = 시간 * speeds[i]
📝 계획
반복문을 돌린다.
순서대로 처리 해주어야 하기 때문에 큐를 사용한다.
[반복할 행위]
1. 처음 element의 기능이 100% 되면
- 기능의 연산은 다음과 같다. progresses[i] = 시간 * speeds[i]
- 그리고 100%이면, 처음 element와 speed를 뺀다. count 증가시켜준다.
→ 그리고 이때, 나머지가 100%인 것들의 element와 speed도 다 queue에서 빼고,
count를 증가시켜주려면, 1번을 다시 체크해주면 된다.
그러기에 100%와 100% X 이 2가지 경우를 나눠주자.
2. 만약에, 100%아니라면,
- 빼낸 갯수가 있다면, 빼낸 갯수를 answer에 추가해줘야한다.
- count가 0이 아니라면, count를 answer에 추가해주고 count = 0으로 초기화 시킨다.
- count가 0이면, 넘어간다.
- 오늘 체크가 끝나고 다음날로 넘어가야하니, 시간을 증가시킨다.
시간이라는 변수를 두어야, 반복문을 더 사용해줄 필요가 없다.
3. 반복문 종료 조건은 progresses가 다 비워지면 종료시킨다.
4. 반복문이 다 끝나면, 마지막 남은 원소의 count를 추가해준다.
3️⃣ 풀이 후 알게된 개념과 소감
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
- 기능의 연산은 다음과 같다. progresses[i] = 시간 * speeds[i]
연산을 정의 해주면, 일일히 체크하지 않아도 되고, 반복문을 줄일 수 있다. - 맨 앞의 것을 체크하는 것을 반복하기에 맨 앞의 것이 100% 맞는지 아닌지의 경우를 나누어서 처리했다.
반복문을 줄일 수 있었다.
'Problem Solving' 카테고리의 다른 글
[백준] 10819 : 차이를 최대로 / python (0) | 2022.01.25 |
---|---|
[프로그래머스] 더 맵게 / python (0) | 2022.01.04 |
[프로그래머스] 위장 / python (0) | 2022.01.04 |
[프로그래머스] 올바른 괄호 문자열 만들기 (2020 KAKAO BLIND) / python (0) | 2021.12.29 |
[프로그래머스] 구명보트 / python (0) | 2021.12.29 |