๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

 

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

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

programmers.co.kr


 

1. ๋ฌธ์ œ

ํ˜„์žฌ ํ”ผ๋กœ๋„ k, ๋˜์ „ ์ด์ฐจ์› ๋ฐฐ์—ด([0]: ์ตœ์†Œ ํ•„์š” ํ”ผ๋กœ๋„, [1]: ์†Œ๋ชจ ํ”ผ๋กœ๋„)์ด ์ฃผ์–ด์กŒ์„ ๋•Œ

์œ ์ €๊ฐ€ ํƒํ—˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋˜์ „ ์ˆ˜์ด๋‹ค.

๋˜์ „ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์˜ˆ๋ฅผ ๋“ค์–ด [80,20]์ผ ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ๋˜์ „์— ์ž…์žฅํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ํ”ผ๋กœ๋„๋Š” 80, ์ž…์žฅ ํ›„ ์†Œ๋ชจ๋˜๋Š” ํ”ผ๋กœ๋„๋Š” 20์ธ ๊ฒƒ์ด๋‹ค.

 

2. ํ’€์ด

์ˆœ์—ด ๋ฌธ์ œ์ด๋‹ค.

๋˜์ „์˜ ์ˆœ์„œ๋ฅผ ์ˆœ์—ด๋กœ ์ค„์„ธ์›Œ ๊ฐ€์žฅ ๋งŽ์ด ์ž…์žฅํ•  ์ˆ˜ ์žˆ๋Š” max ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜์—ฌ ๋‹ต์„ ๊ตฌํ–ˆ๋‹ค.

1. ์ˆœ์—ด ํ•จ์ˆ˜ ๋“ค์–ด์˜ค์ž๋งˆ์ž max์™€ cnt๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ max๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ cnt๋Š” ๋˜์ „ ์ž…์žฅ ํšŸ์ˆ˜์ด๋‹ค.

2. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ›„ ํ”ผ๋กœ๋„๊ฐ€ ์ตœ์†Œํ•„์š”ํ”ผ๋กœ๋„๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜, ์†Œ๋ชจ๋  ํ”ผ๋กœ๋„๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ continue๋กœ ๋ณด์ง€์•Š์•˜๋‹ค.

3. ๋‹ค์Œ ์ˆœ์„œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

์ˆœ์—ด์€ ๋น„ํŠธ๋งˆ์Šคํ‚น์œผ๋กœ ํ’€์—ˆ๋‹ค.

๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์“ฐ๋ฉด ์‚ฌ์šฉ์—ฌ๋ถ€๋ฅผ flag๋กœ๋งŒ ์ฒดํฌํ•˜๊ณ  isVisited๋‚˜ isSelected์™€ ๊ฐ™์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ์†์‰ฝ๊ฒŒ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŽธํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

3. ์ฝ”๋“œ

class Solution {
    
    static int max, length, dungeon[][];
    
    public int solution(int k, int[][] dungeons) {
        dungeon = dungeons;
        length = dungeons.length;
        
        perm(0, 0, 0, k);
        
        return max;
    }
    
    static void perm(int idx, int cnt, int flag, int hp) {
        max = Math.max(max, cnt);
        if (idx == length) {
            return;
        }
        for (int i=0; i<length; i++) {
            if ((flag & (1<<i)) != 0) continue;
            if (hp < dungeon[i][0] || hp < dungeon[i][1]) continue;
            perm(idx+1, cnt+1, flag|(1<<i), hp-dungeon[i][1]);
        }
    }
}

 

4. ์‚ฌ๋‹ด

๋น„ํŠธ๋งˆ์Šคํ‚น์„ ์™œ ์ด์ œ์•ผ ์•Œ์•˜์„๊นŒ ๊ฝค๋‚˜ ํŽธํ•œ๋“ฏ