๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - (Level2)์ฃผ์‹๊ฐ€๊ฒฉ

by ์ฃผ๋ฐœ2 2020. 3. 16.
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42584

 

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

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

programmers.co.kr

์ฝ”๋“œ

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        answer[prices.length-1] = 0;    // ๋งˆ์ง€๋ง‰ ๊ฐ€๊ฒฉ์€ ๋–จ์–ด์งˆ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ 0
        for(int i=0; i<prices.length-1; i++){
             boolean flag = true;
            if(prices[i] == 1){ // ์ฃผ์‹ ๊ฐ€๊ฒฉ์ด 1์›์ด๋ฉด ๊ฐ€๊ฒฉ์€ ๋๊นŒ์ง€ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
                answer[i] = prices.length - i - 1;
            }

            else{
                // ํ˜„์žฌ ์ฃผ์‹์˜ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๋Š” ์ง€์  ์ฐพ๊ธฐ
                for(int j=i+1; j<prices.length; j++){
                    if(prices[i] > prices[j]){
                        answer[i] = j-i;    // j-i์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๊ฒƒ์œผ๋กœ ๋ณธ๋‹ค.
                        flag = false;
                        break;
                    }
                }
                // ๋งŒ์•ฝ ํ˜„์žฌ ์ฃผ์‹์ด ๋๊นŒ์ง€ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
                if(flag){
                 answer[i] = prices.length - i - 1;
                 }
            }
           
        }
        return answer;
    }
}

ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๊ฒƒ์ด ์•ฝ๊ฐ„ ์–ด๋ ค์› ๋‹ค.

์ฃผ์‹๊ฐ€๊ฒฉ์ด ๋‹ด๊ธด ๋ฐฐ์—ด prices = [1, 2, 3, 2, 3]์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ธฐ๊ฐ„์ด ๋ช‡์ดˆ์ธ์ง€ 

answer๋ฐฐ์—ด์— ๋‹ด์•„์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

์œ„ prices = [1, 2, 3, 2, 3] ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๋ฉด,

์ฒซ ๋ฒˆ์งธ ๊ฐ€๊ฒฉ 1์˜ ๊ฒฝ์šฐ ์ดํ›„์˜ ๊ฐ€๊ฒฉ[2, 3, 2, 3] ๋ณด๋‹ค ์ž‘๋‹ค. ๋”ฐ๋ผ์„œ ์ฃผ์‹์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ฐ€๊ฒฉ์€ ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉฐ,

๊ทธ๊ธฐ๊ฐ„์€ 4์ดˆ๊ฐ€ ๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ ๊ฐ€๊ฒฉ 2์˜ ๊ฒฝ์šฐ๋„ ์ดํ›„์˜ ๊ฐ€๊ฒฉ[3, 2, 3] ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฏ€๋กœ. ์ฃผ์‹์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ฐ€๊ฒฉ์€ ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉฐ,

๊ทธ ๊ธฐ๊ฐ„์€ 3์ดˆ๊ฐ€ ๋œ๋‹ค.

์„ธ ๋ฒˆ์งธ ๊ฐ€๊ฒฉ 3์˜ ๊ฒฝ์šฐ, ๋ฐ”๋กœ ๋’ค[2, 3]์˜ ๊ฐ€๊ฒฉ๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, 1์ดˆ๋’ค์— ๋–จ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๊ฐ„์€ 1์ดˆ

๋„ค ๋ฒˆ์งธ ๊ฐ€๊ฒฉ 2์˜ ๊ฒฝ์šฐ, ์ดํ›„์˜ ๊ฐ€๊ฒฉ[3] ๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, ์ฃผ์‹์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ฐ€๊ฒฉ์€ ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉฐ,

๊ทธ ๊ธฐ๊ฐ„์€ 1์ดˆ๊ฐ€ ๋œ๋‹ค.

๋งˆ์ง€๋ง‰ ๊ฐ€๊ฒฉ 3์˜ ๊ฒฝ์šฐ, ์ดํ›„์—๋Š” ์•„๋ฌด ๊ฐ€๊ฒฉ์ด ์—†์œผ๋ฏ€๋กœ 0์ดˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

prices์˜ ๊ฐ€๊ฒฉ์€ 1์ด์ƒ 10,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๋ฏ€๋กœ,

1) ๋ฐฐ์—ด์˜ ๊ฐ’์ด 1์ผ๊ฒฝ์šฐ

 - ๊ทธ ๋ฐฐ์—ด์˜ ์ตœ์†Ÿ๊ฐ’์ด ๋˜๋ฏ€๋กœ, ์ฃผ์‹์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ฐ€๊ฒฉ์€ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

 - ๋”ฐ๋ผ์„œ ๊ทธ ๊ฒฝ์šฐ ๊ธฐ๊ฐ„์€ ๋ฐฐ์—ด์˜๊ธธ์ด - i - 1์ด ๋œ๋‹ค.

 - ์œ„์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ฐ€๊ฒฉ์˜ ๊ฒฝ์šฐ, ๋ฐฐ์—ด์˜๊ธธ์ด(5) - i(0) - 1 = 4 ์ด๋‹ค.

 

2) ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์€ ํ•ญ์ƒ 0์ดˆ๋‹ค.

 

3) ๊ทธ ์™ธ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๋Š” ์‹œ๊ฐ„์„ ์ฐพ๋Š”๋‹ค.

 - ํ˜„์žฌ ์ฃผ์‹ ๊ฐ€๊ฒฉ(i)๋ฒˆ์งธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ ๋‹ค์Œ ์ฃผ์‹ ๊ฐ€๊ฒฉ(j = i+1)๋ถ€ํ„ฐ ๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.

 - ๋งŒ์•ฝ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๋Š” ๊ณณ์ด ์žˆ์„๊ฒฝ์šฐ(prices[i] > prices[j])

 - ๊ทธ ์‹œ๊ฐ„์€ j - i ๊ฐ€ ๋œ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ๋„ [1, 2, 3, 2, 3] 2๋ฒˆ์งธ๊ฐ’ 3๊ณผ 3๋ฒˆ์งธ๊ฐ’ 2์˜ ์ฐจ์ด๋Š” 1์ด๋‹ค.

 - ๊ทธ ํ›„ ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๊ธฐ์œ„ํ•ด flag๋ณ€์ˆ˜๋ฅผ false๋กœ ์„ค์ •ํ•˜๊ณ , break๋ฅผ ํ†ตํ•ด ํƒˆ์ถœํ•œ๋‹ค.

 - ๋งŒ์•ฝ for๋ฌธ์„ ๋น ์ ธ๋‚˜์™€ flag๊ฐ€ true์ธ ๊ฒฝ์šฐ(ํ˜„์žฌ ๊ฐ€๊ฒฉ์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ)

 - ์œ„์˜ ๊ฒฝ์šฐ๋Š” ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ฐ„์„ ๊ตฌํ•œ๋‹ค.(prices.length - i - 1)

 

 

 

๋‹ค๋ฅธ ์ฝ”๋“œ

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        
        for(int i=0; i<answer.length; i++){
            int sec = 0;
            for(int j=i+1; j<answer.length; j++){
                sec ++;
                if(prices[i] > prices[j])
                    break;
            }
            answer[i] = sec;
        }
        return answer;
    }
}

๊ฐ„๋‹จํ•˜๋‹ค...

์ฃผ์‹ ๊ฐ€๊ฒฉ์ด ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„ sec๋ฅผ ์„ค์ •ํ•˜๊ณ , ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ 1์ดˆ์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

๋งŒ์•ฝ ๊ฐ€๊ฒฉ์ด ์ปค์ง€๋ฉด for๋ฌธ์„ ํƒˆ์ถœํ•˜๊ณ , sec์˜ ๊ฐ’์ด ์‹œ๊ฐ„์ด ๋œ๋‹ค.

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€