제이슨의 개발이야기
[코딩테스트] 기능개발 Java 프로그래머스 스택,큐 level 2 본문
https://programmers.co.kr/learn/courses/30/lessons/42586
안녕하세요 ㅎㅎ 124 나라에 이어서 바로 기능 개발 이란 문제를 풀었습니다
저번에 풀었던 124 나라의 숫자 문제 에 이어서 level 2 인 문제였는대
제가 개인적으로 느꼈던 것은 124 나라의 숫자 문제보다 훨씬 쉬웠습니다!
※문제를 설명하기 앞서 요번 문제를 풀면서 느낀점※
요번 문제를 풀면서 느낀점은 확실히 제 코드는 if 문도 많고 for문도 많고 코드의 양이 상대적으로 많다는 것을 또 한번 느끼고
앞으로 문제를 풀때 역시 정확성이 가장 중요하지만 코드의 효율성도 신경쓰면서 앞으로 문제를 풀어야겠다는 생각이들었습니다!!
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력 예
progresses | speeds | return |
[93, 30, 55] | [1, 30, 5] | [2, 1] |
[95, 90, 99, 99, 80, 99] | [1, 1, 1, 1, 1, 1] | [1, 3, 2 |
해당 문제는 스택,큐를 이용해서 풀라는 문제입니다
그래서 처음에는 자바에서 queue 객체를 이용해서 풀까 고민했다가 그냥 배열을 큐 처럼 접근해서 문제를 풀어도 충분할거같았습니다
그리고 가장 첫번째가 완료가 되어야 뒤에 진행상황에 따라 배포가 가능 하다는 점을 생각해서
가장 첫번째 배포해야 하는 기능 의 위치를 가리킬 수 있는 변수(저는 start 라는 Int형 변수를 만듬)를 하나 만들어놓음으로 써 뒤에 기능 이 이미 개발 완료가 되었더라도 앞에 진행 상황에 따라서 배포를 늦출 수 있게 했습니다
import java.util.Arrays;
import java.util.HashMap;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] answer = {};
int start = 0;
int step = 1;
HashMap<Integer , Integer> map = new HashMap<>();
while(true){
for(int i = 0; i<progresses.length; i++){
progresses[i] = progresses[i]+speeds[i];
if(progresses[i]>100){
progresses[i]=100;
}
if(progresses[i]==100){
if(start==i){
if(map.get(step)==null){
map.put(step,1);
}else{
map.put(step,map.get(step)+1);
}
start++;
}
}
}
if(start==progresses.length){
break;
}
step++;
}
int i =0;
int [] sorted= new int[map.keySet().size()];
for(int k : map.keySet()){
sorted[i++] = k;
}
Arrays.sort(sorted);
i=0;
answer = new int[map.keySet().size()];
for(int k : sorted){
answer[i++]=map.get(k);
}
return answer;
}
}
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 프린터 Java level2 (0) | 2021.06.02 |
---|---|
[코딩테스트] 짝지어 제거하기 Java 프로그래머스 2017 팁스타운 (0) | 2021.05.29 |
[코딩테스트] 124 나라의 숫자 Java 프로그래머스 level 2 3진법 (0) | 2021.05.27 |
[코딩테스트] 시저암호 java 프로그래머스 (0) | 2021.05.25 |
[코딩테스트] 크레인 인형뽑기 게임 Java 2019 카카오 개발자 겨울 인턴십 (0) | 2021.05.23 |