컴퓨터/프로그래머스
프로그래머스 - 42586번: 기능개발 [Java]
이상한 나그네
2023. 10. 11. 00:51
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42586
1. 코드
import java.util.*;
class Solution {
public List <Integer> solution(int[] progresses, int[] speeds) {
List <Integer> answer = new ArrayList<>();
while(progresses.length > 0) {
for(int i = 0; i < progresses.length; i++)
progresses[i] += speeds[i];
int cnt = 0;
while(progresses.length > 0 && progresses[0] >= 100) {
cnt++;
progresses = Arrays.copyOfRange(progresses, 1, progresses.length);
speeds = Arrays.copyOfRange(speeds, 1, speeds.length);
}
if(cnt > 0)
answer.add(cnt);
}
return answer;
}
}
2. 설명
문제에서 스택 혹은 큐를 이용하여 해결하는 것을 의도한 것 같지만 배열을 이용하여 해결하는 것이 더 간단해 보여 배열을 이용한 풀어보았다.
while(progresses.length > 0) {
for(int i = 0; i < progresses.length; i++)
progresses[i] += speeds[i];
progresses의 길이가 1 이상일 때 즉 progresses가 존재한다면 계속 반복합니다. 그리고 각각의 progresses에 맞는 speeds를 더해줍니다.
int cnt = 0;
while(progresses.length > 0 && progresses[0] >= 100) {
cnt++;
progresses = Arrays.copyOfRange(progresses, 1, progresses.length);
speeds = Arrays.copyOfRange(speeds, 1, speeds.length);
}
if(cnt > 0)
answer.add(cnt);
progresses의 길이가 1 이상이고 progresses 첫 번째 요소가 100 이상일 때 반복해 줍니다. 반복할 때마다 cnt의 값을 1 증가시키고 progresses와 speeds의 첫 번째 요소를 제거합니다. 따라서 cnt는 배포된 기능의 수이며 0 이상일 경우 answer에 추가해 주며 answer를 반환하면 문제는 해결됩니다.
3. 정리
- 배열을 이용해 쉽게 해결 가능
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges