๊ธฐ๋ก๋ฐฉ

Lv.2 : ์ˆซ์ž ๋ณ€ํ™˜ํ•˜๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : ์ˆซ์ž ๋ณ€ํ™˜ํ•˜๊ธฐ

Soom_1n 2023. 11. 27. 09:45

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

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

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

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ •์ˆ˜ x, y, n์ด ์ž…๋ ฅ๋œ๋‹ค.
  • x๋ฅผ 3๊ฐ€์ง€ ์—ฐ์‚ฐ (+n, x2, x3) ์œผ๋กœ y๋ฅผ ๋งŒ๋“œ๋Š” ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • y๋ฅผ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • BFS์™€ DP๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • BFS๋Š” ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๋‹ค์Œ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์„œ y๋ฅผ ์ฐพ์•„๊ฐ€๋Š”๋ฐ, y๋ฅผ ์ดˆ๊ณผํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธ ํ–ˆ์œผ๋ฉด ์ œ์™ธํ•œ๋‹ค.
    • DP๋Š” x๋ถ€ํ„ฐ y๊นŒ์ง€ ์ธ๋ฑ์Šค๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉฐ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ์ฒ˜์Œ ๋ฐฉ๋ฌธ์ด๋ฉด ํ˜„์žฌ ๊ฐ’์„ ๋„ฃ๊ณ  ์ด๋ฏธ ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋” ์ž‘์€ ๊ฐ’์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ y๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ„๋‹ค.
  • ์•„๋ž˜ ํ’€์ด๋Š” DP๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

class Solution {
    public int solution(int x, int y, int n) {
        int[] dp = new int[y + 1];

        for (int i = x + 1; i <= y; i++) {
            dp[i] = Integer.MAX_VALUE;
        }

        for (int i = x; i < y; i++) {
            if (dp[i] < Integer.MAX_VALUE) {
                if (i + n <= y)
                    dp[i + n] = Math.min(dp[i + n], dp[i] + 1);
                if (i * 2 <= y)
                    dp[i * 2] = Math.min(dp[i * 2], dp[i] + 1);
                if (i * 3 <= y)
                    dp[i * 3] = Math.min(dp[i * 3], dp[i] + 1);

            }
        }

        return dp[y] == Integer.MAX_VALUE ? -1 : dp[y];
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • intํ˜• ๋ฐฐ์—ด dp์˜ ์ธ๋ฑ์Šค x+1 ~ y ์„ Integer.MAX_VALUE ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  • x๋ถ€ํ„ฐ y-1๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • dp[i]๊ฐ€ Integer.MAX_VALUE๋ฉด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ ์ œ์™ธํ•œ๋‹ค.
    • ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
      • ์ธ๋ฑ์Šค๊ฐ€ y๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด, ์ €์žฅ ๋œ ๊ฐ’๊ณผ ํ˜„์žฌ ๊ฐ’ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  • dp[y]๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ์—๋Š” BFS๋กœ ํ’€์ดํ–ˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ DP๋กœ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ–ˆ๋‹ค.
    • BFS๋กœ ํ’€์ดํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ฌธ์ œ์ธ ์ค„ ์•Œ์•˜๋Š”๋ฐ, ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์•„์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ„ฐ์ ธ๋ฒ„๋ฆฐ ํƒ“์ด์—ˆ๋‹ค.
    • ์ฝ”ํ…Œ๋ฅผ ํ•˜๋„ ์•ˆํ’€์—ˆ๋”๋‹ˆ ์ž์‹  ์žˆ์—ˆ๋˜ DFS, BFS๋ฌธ์ œ๋ฅผ ์ดˆ๋ณด์ ์ธ ์‹ค์ˆ˜๋กœ ํ‹€๋ฆฌ๊ฒŒ ๋˜๋‹ˆ ๋งŽ์ด ๋ฐ˜์„ฑํ•˜๊ฒŒ ๋œ๋‹ค...
  • DP๋กœ ํ’€์ด ํ•  ๋•Œ๋„ ์ž˜๋ชป ์ƒ๊ฐ ํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.
    • ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ์„๋•Œ์˜ ์‹œ๋„ ํšŸ์ˆ˜๊ฐ€ ๋ฐ”๋กœ ์ตœ์†Œ๊ฐ’์ด ๋˜๋Š” ์ค„ ์•Œ๊ณ  ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ด๊ฐ”๋‹ค.
    • BFS๋ฅผ ์‹œ๋„ํ•˜๋‹ค๊ฐ€ ๋ฐ”๊ฟ”์„œ ํ—ท๊น”๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.
    • ์ตœ์ดˆ๋กœ dp[i]๊ฐ’์„ ๋ณ€๊ฒฝํ–ˆ์„๋•Œ ๋ณด๋‹ค ๋‹ค๋ฅธ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋” ๋‚ฎ์€ ํšŸ์ˆ˜๋กœ ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

728x90