๐Ÿ“š ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€ & ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][JAVA]Level 1 : ์‹คํŒจ์œจ

deep_lee 2023. 3. 4. 14:47

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


๋ฌธ์ œ ์ดํ•ดํ•˜๋Š”๋ฐ๋„ ์‹œ๊ฐ„ ์ข€ ๊ฑธ๋ฆฌ๊ณ ..

ํ‘ธ๋Š”๋ฐ ๋˜๊ฒŒ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค...

 

์ฃผ์˜ํ•  ์ ์€ stage์— ๋„์ฐฉํ•œ ์‚ฌ๋žŒ์ด ์žˆ์„๋•Œ๋Š” ์‹คํŒจ์œจ ๊ณ„์‚ฐํ•˜๊ณ ,

๋„์ฐฉํ•œ ์‚ฌ๋žŒ์ด ์—†์„๋•Œ๋Š” 0์„ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

 

๊ทผ๋ฐ ๋‚˜๋Š” stage ์— ์‚ฌ๋žŒ์ด ์žˆ๋ƒ/์—†๋ƒ์˜ ์กฐ๊ฑด๋ฌธ์„ ์ด์ƒํ•˜๊ฒŒ ์จ๋†”์„œ

๊ทธ๊ฑฐ ์žก์•„๋จน๋Š”๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆผ... 2์‹œ๊ฐ„์ •๋„ ๊ฑธ๋ ธ๋‹ค....

 

 

 

import java.util.*;
class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];

        // ๊ฐ stage ๋งˆ๋‹ค ๋จธ๋ฌผ๋Ÿฌ์žˆ๋Š” ์‚ฌ์šฉ์ž์ˆ˜๋ฅผ ๋‹ด๋Š”๋‹ค , ์ธ๋ฑ์Šค๊ฐ’์ด ์Šคํ…Œ์ด์ง€๋ฒˆํ˜ธ
        float[] stage = new float[N+1]; 
        for(int i: stages){
            if(i==N+1){
                continue;
            }
            stage[i]++;
        }

        float[] fail_array = new float[N]; // ์‹คํŒจ์œจ์„ ๋‹ด์„ ๋ฐฐ์—ด
        ArrayList<Float> index_array = new ArrayList<>(); // ์‹คํŒจ์œจ๊ณผ ๋น„๊ตํ•˜์—ฌ answer์— index๋ฅผ ๋‹ด์•„์ค„ ๋ฐฐ์—ด
        float len = stages.length; // ์‹คํŒจ์œจ ๋น„๊ต์‹œ ๋ถ„๋ชจ ๊ฐ’
        
        int index = 0; // ๋ฐฐ์—ด์˜ index
        for(int i = 1; i<stage.length; i++){
            if(stage[i]!=0.0){ // ์Šคํ…Œ์ด์ง€ i์— ๋„์ฐฉํ•œ ์‚ฌ๋žŒ์ด ์žˆ์„๋•Œ
                fail_array[index]=stage[i]/len;
                index_array.add(stage[i]/len);
                len -= stage[i];
            } else { // ์Šคํ…Œ์ด์ง€์— ์‚ฌ๋žŒ์ด ์—†์œผ๋ฉด 0 ๋„ฃ์–ด์ฃผ๊ธฐ
                fail_array[index]=0.0F;
                index_array.add(0.0F);
                continue;
            }
            index++;
        }
        Arrays.sort(fail_array); // ์‹คํŒจ์œจ์„ ์ •๋ ฌ
        int num = 0;
        // ์ •๋ ฌํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ๊ฐ’๋ถ€ํ„ฐ ๋น„๊ต
        for(int i= fail_array.length-1; i>=0; i--){
            for(int j=0; j<index_array.size(); j++){
                if(fail_array[i]==index_array.get(j)){
                    answer[num]=j+1;
                    index_array.set(j, -1.F); // ์ž‘์€ ์Šคํ…Œ์ด์ง€ ๋จผ์ € ๋„ฃ์–ด์ฃผ๊ณ , ํ•ด๋‹น ๊ฐ’์€ -1๋กœ
                    num++;
                    break;
                }
            }
        }
        return answer;
    }
}