제이슨의 개발이야기

[코딩테스트] 기능개발 Java 프로그래머스 스택,큐 level 2 본문

코딩테스트

[코딩테스트] 기능개발 Java 프로그래머스 스택,큐 level 2

제이쓰은 2021. 5. 28. 00:25
728x90
반응형

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;
    }
}

 

728x90
반응형