
문제
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력 예

아이디어
우선 progresses 배열을 deque로 바꿔주고 앞에서부터 하나씩 빼서, speed와 짝을 맺은다음,
계속 더해주다가 100을 넘어가면 check++를 통해서 카운트한다.
하지만, 이전에 공부하다가 배웠던 것은 절대 원본을 훼손하면 안된다는 거였다.(데이터가 꼬일 수도 있기 때문에)
그래서 ArrayList를 하나 만들어서 progresses를 복사하고, 해당 어레이 리스트에서 계산을 진행하고 조건에 맞는 경우 deque에서 poll을 하여 문제를 해결하였다.
소스코드
import java.util.*;
class Solution {
public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>();
Queue<Integer> q = new LinkedList<>();
for(int t : progresses){
q.offer(t);
}
int[] result = progresses;
int resultIdx = 0;
while(!q.isEmpty()){
for(int i = progresses.length - q.size();i<progresses.length;i++){
result[i] += speeds[i];
}
int q_size = q.size();
int check = 0;
for(int j =progresses.length - q_size; j<progresses.length;j++){
if(result[j] >= 100){
check++;
q.poll();
if(q.size() == 0){
answer.add(check);
return answer;
}else{
continue;
}
}else if (check>0){
answer.add(check);
break;
}else{
break;
}
}
}
return answer;
}
}
결과

맞았다!
후기
분명히 파이썬으로 풀 때는 쉬웠는데, 이상하다...
아직 자바가 익숙하지 않을 것같다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스 level1] 나누어 떨어지는 숫자 배열 / Java (0) | 2024.04.18 |
---|---|
[백준 브론즈3] 10818번 최소,최대 / Java (0) | 2024.04.18 |
[백준 실버3] 1021번 회전하는 큐 / Java (0) | 2024.04.16 |
[프로그래머스 level 1] 같은 숫자는 싫어 / Java (0) | 2024.04.15 |
[백준 골드5] 25556번 포스택 / Java (0) | 2024.04.15 |

문제
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력 예

아이디어
우선 progresses 배열을 deque로 바꿔주고 앞에서부터 하나씩 빼서, speed와 짝을 맺은다음,
계속 더해주다가 100을 넘어가면 check++를 통해서 카운트한다.
하지만, 이전에 공부하다가 배웠던 것은 절대 원본을 훼손하면 안된다는 거였다.(데이터가 꼬일 수도 있기 때문에)
그래서 ArrayList를 하나 만들어서 progresses를 복사하고, 해당 어레이 리스트에서 계산을 진행하고 조건에 맞는 경우 deque에서 poll을 하여 문제를 해결하였다.
소스코드
import java.util.*;
class Solution {
public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answer = new ArrayList<>();
Queue<Integer> q = new LinkedList<>();
for(int t : progresses){
q.offer(t);
}
int[] result = progresses;
int resultIdx = 0;
while(!q.isEmpty()){
for(int i = progresses.length - q.size();i<progresses.length;i++){
result[i] += speeds[i];
}
int q_size = q.size();
int check = 0;
for(int j =progresses.length - q_size; j<progresses.length;j++){
if(result[j] >= 100){
check++;
q.poll();
if(q.size() == 0){
answer.add(check);
return answer;
}else{
continue;
}
}else if (check>0){
answer.add(check);
break;
}else{
break;
}
}
}
return answer;
}
}
결과

맞았다!
후기
분명히 파이썬으로 풀 때는 쉬웠는데, 이상하다...
아직 자바가 익숙하지 않을 것같다.
'코딩 테스트' 카테고리의 다른 글
[프로그래머스 level1] 나누어 떨어지는 숫자 배열 / Java (0) | 2024.04.18 |
---|---|
[백준 브론즈3] 10818번 최소,최대 / Java (0) | 2024.04.18 |
[백준 실버3] 1021번 회전하는 큐 / Java (0) | 2024.04.16 |
[프로그래머스 level 1] 같은 숫자는 싫어 / Java (0) | 2024.04.15 |
[백준 골드5] 25556번 포스택 / Java (0) | 2024.04.15 |