본문 바로가기
TIL

[코테연습] 기능개발

by 크라00 2024. 5. 22.

오늘은 스택/큐 연습이었다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내가 해당 문제를 푼 방법은 다음과 같다.

 

1. progresses 배열에서 100이 되기 위한 기간을 각자 구하여 array 에 초기화 한다.

2. 초기화된 array 의 배열의 첫번째 값을 다음 값과 비교한다.

3. 다음 값보다 클 경우 ( arr[0] = 7 > arr[1] = 3 ), 현재 인덱스에 그대로 값을 1개 더 해준다.

4. 다음 값보다 작을 경우 ( arr[0] 7 < arr[2] = 9 ), 인덱스를 증가시키고 값을 1개 더해준다. 

 

int[] progress = {93, 30, 55};

int[] speeds = {1, 30, 5};

 

해당 배열이 있다고 한다면, 다음과 같은 점화식으로 해를 구한다

 

1) 

100 - 93 = 7 / 1 = 7
100 - 30 = (ceil) 70 / 30 = 3

 

초기화된 배열은 다음과 같다

int[] arr = {7,3,9}

 

  그리고 now 변수를 선언하고 arr 배열의 값의 앞, 뒤를 비교해주면 될 것이다.
           
           int now = 7; arr[0] = 7; answer[0] = 1;
           int now = 7; arr[1] = 3; answer[0] = 2;
           int now = 9; arr[1] = 9; answer[1] = 1;
        

구현한 코드는 다음과 같다.

 

 public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = new int[1];

        /*
         * 100 - 93 = 7 / 1 = 7
         * 100 - 30 = (ceil) 70 / 30 = 3
         *
         */

         //progress 에서 100 이 되기 위한 기간을 각자 구하여 array 에 초기화한다

        int[] arr = new int[progresses.length];

        for (int i = 0; i < progresses.length; i++) {
            int progress = progresses[i];
            int speed = speeds[i];
            int remain = 100 - progress;
            int day = (int) Math.ceil((double) remain / (double) speed);
            System.out.println("pr : ["+progress+"], sp : ["+speed+"] ==> [ "+remain+" / "+speed+"] ==> : "+day);
            arr[i] = day;
        }

        // print(arr);

        //arr[0] 을 now 값으로 정하고, now 보다 현재 값 ( arr[i] ) 이 크면, answer[] 배열을 늘리고 index 값을 늘린다.
        //answer[] 배열의 index (idx) 값에 +1 을 해준다.

        int idx = 0;
        int now = arr[0];
        for(int i = 0; i < arr.length; i++) {
            //9 > 7
            if (arr[i] > now) {
                now = arr[i];
                idx++;
                answer = Arrays.copyOf(answer, answer.length+1);
            }
            answer[idx] = answer[idx]+1;
            System.out.println("now : "+now);
        }

        // print(answer);
        return answer;
    }

 

'TIL' 카테고리의 다른 글

[코테연습] smallest-number-in-infinite-set  (0) 2024.05.25
[코테연습] 더맵게  (0) 2024.05.24
[코테연습] 올바른 괄호  (0) 2024.05.23
[코테연습] 의상  (0) 2024.05.21
[코테연습] 전화번호목록  (0) 2024.05.20