๊ด€๋ฆฌ ๋ฉ”๋‰ด

Binary Journey

[ํ…Œ์ฝ”ํ…Œ์ฝ”1.5 1-08] ๊ณต์› ๋ณธ๋ฌธ

Algorithm/ํ…Œ์ฝ”ํ…Œ์ฝ”1.5(2025.01)

[ํ…Œ์ฝ”ํ…Œ์ฝ”1.5 1-08] ๊ณต์›

binaryJournalist 2025. 1. 14. 15:33
๋ฐ˜์‘ํ˜•
๐Ÿ’กํ…Œ์ฝ”ํ…Œ์ฝ” ์‹œ์ฆŒ 1.5 1ํšŒ ๋ชจ์ž„ off-site ๋ฌธ์ œ ํ’€์ด์ž…๋‹ˆ๋‹ค. (2025.01.12)

 

๋ฌธ์ œ

 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - PCCE ๊ธฐ์ถœ๋ฌธ์ œ 10. ๊ณต์›

 

๋‚ด์šฉ

 

์ง€๋ฏผ์ด๋Š” ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘ ๋—์ž๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณต์›์— ์†Œํ’์„ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๊ณต์›์—๋Š” ์ด๋ฏธ ๋—์ž๋ฆฌ๋ฅผ ๊น”๊ณ  ์—ฌ๊ฐ€๋ฅผ ์ฆ๊ธฐ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์•„ ์ง€๋ฏผ์ด๊ฐ€ ๊น” ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋—์ž๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ฑด์ง€ ํ™•์ธํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋—์ž๋ฆฌ์˜ ํ•œ ๋ณ€ ๊ธธ์ด๊ฐ€ 5, 3, 2 ์„ธ ์ข…๋ฅ˜์ด๊ณ , ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•‰์•„ ์žˆ๋‹ค๋ฉด ์ง€๋ฏผ์ด๊ฐ€ ๊น” ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋—์ž๋ฆฌ๋Š” 3x3 ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

 

 

 

 

์ง€๋ฏผ์ด๊ฐ€ ๊ฐ€์ง„ ๋—์ž๋ฆฌ๋“ค์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด๋“ค์ด ๋‹ด๊ธด ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ mats, ํ˜„์žฌ ๊ณต์›์˜ ์ž๋ฆฌ ๋ฐฐ์น˜๋„๋ฅผ ์˜๋ฏธํ•˜๋Š” 2์ฐจ์› ๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ park๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ง€๋ฏผ์ด๊ฐ€ ๊น” ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋—์ž๋ฆฌ์˜ ํ•œ ๋ณ€ ๊ธธ์ด๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. ์•„๋ฌด๋Ÿฐ ๋—์ž๋ฆฌ๋„ ๊น” ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ -1์„ returnํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ธฐ๋กํ•˜๊ธฐ

๐Ÿ’ก ์–ด๋””๊นŒ์ง€ ์ƒ๊ฐํ•ด๋ดค๋Š”์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ๊ธฐ๋กํ•ด๋ด…๋‹ˆ๋‹ค.

 

์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ ค ํ–ˆ๋‚˜์š”?

 

DP, Dynamic Programming์„ ์ด์šฉํ•˜๋ ค ํ•œ๋‹ค.

 

์ ์šฉ ๊ทผ๊ฑฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ์ค‘ ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜• ์ฐพ๊ธฐ ์™€ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ฌธ์ œ ํ’€์ด ๊ณผ์ •์—์„œ ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ ค ํ–ˆ๋‚˜์š”?

 

ํ’€์ด ๋ฐฉ์‹์˜ ์ด๋ฏธ์ง€๋Š” ์ด ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

-1์„ ๊ฐ€์ง„ ์ตœ๋Œ€ ์ •์‚ฌ๊ฐํ˜•์„ ์ฐพ์•„ ํ•œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ 2, 3, 5 ์ค‘ ๊ฐ€๋Šฅํ•œ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

 

1. DP ๋ฐฐ์—ด ์„ ์–ธ. (์•„๋‹ˆ๋ฉด ์ฃผ์–ด์ง„ 2์ฐจ์› ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋จ)
    1. ์ฒซ ํ–‰์€ ๊ทธ๋Œ€๋กœ ์ง€๋‚˜๊ฐ
    2. ๋‘ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์นธ ๊ธฐ์ค€์œผ๋กœ ์ขŒ, ์ƒ, ์ขŒ์ƒ ํƒ์ƒ‰
        1. ํƒ์ƒ‰๊ฐ’์ด 1์ผ ๊ฒฝ์šฐ ์ •์‚ฌ๊ฐํ˜• ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐฏ์ˆ˜๋ฅผ ๊ธฐ๋ก
        2. ์ˆซ์ž๊ฐ€ 2 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ขŒ, ์šฐ, ์ขŒ์šฐ ํƒ์ƒ‰ ๊ธฐ์ค€์œผ๋กœ ํ•ด๋‹น ๋ณ€์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ์ •์‚ฌ๊ฐํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋จ
    3. ์•„๋ž˜ ํ–‰๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด๋ฅผ ๋ˆ„์ ํ•จ
        1. ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
2. ์ตœ๋Œ€ ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด 2, 3, 5 ์ค‘ ๋ฐ˜ํ™˜

 

 

ํ’€์ด

ํ’€์ด ์‹œ๊ฐ„

์‹œ์ž‘ ์‹œ๊ฐ ์ข…๋ฃŒ ์‹œ๊ฐ ์ด ์†Œ์š” ์‹œ๊ฐ„
22:02 22:37 35๋ถ„

 

 

๋ฌธ์ œ ๋ถ„์„

 

์ œ์•ฝ ์‚ฌํ•ญ ํŒŒ์•… & ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

 

  • 1 ≤ mats์˜ ๊ธธ์ด ≤ 10
    • 1 ≤ mats์˜ ์›์†Œ ≤ 20
    • mats๋Š” ์ค‘๋ณต๋œ ์›์†Œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1 ≤ park์˜ ๊ธธ์ด ≤ 50
    • 1 ≤ park[i]์˜ ๊ธธ์ด ≤ 50
    • park[i][j]์˜ ์›์†Œ๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • park[i][j]์— ๋—์ž๋ฆฌ๋ฅผ ๊น ์‚ฌ๋žŒ์ด ์—†๋‹ค๋ฉด "-1", ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์•ŒํŒŒ๋ฒณ ํ•œ ๊ธ€์ž๋กœ ๋œ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

์ž…๋ ฅ๊ฐ’ ๋ถ„์„

๐Ÿ’ก ์ž…๋ ฅ๊ฐ’์„ ๋ถ„์„ํ•˜๋ฉด ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mats park result
[5,3,2] [["A", "A", "-1", "B", "B", "B", "B", "-1"], ["A", "A", "-1", "B", "B", "B", "B", "-1"], ["-1", "-1", "-1", "-1", "-1", "-1", "-1", "-1"], ["D", "D", "-1", "-1", "-1", "-1", "E", "-1"], ["D", "D", "-1", "-1", "-1", "-1", "-1", "F"], ["D", "D", "-1", "-1", "-1", "-1", "E", "-1"]]  

 

 

์˜์‚ฌ ์ฝ”๋“œ ์ž‘์„ฑ

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋™์ž‘ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์ˆœ์„œ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋ฅผ ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•ด๋ด…๋‹ˆ๋‹ค.

1. DP ๋ฐฐ์—ด ์„ ์–ธ. (์•„๋‹ˆ๋ฉด ์ฃผ์–ด์ง„ 2์ฐจ์› ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋จ)
    1. ์ฒซ ํ–‰์€ ๊ทธ๋Œ€๋กœ ์ง€๋‚˜๊ฐ
    2. ๋‘ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์นธ ๊ธฐ์ค€์œผ๋กœ ์ขŒ, ์ƒ, ์ขŒ์ƒ ํƒ์ƒ‰
        1. ํƒ์ƒ‰๊ฐ’์ด 1์ผ ๊ฒฝ์šฐ ์ •์‚ฌ๊ฐํ˜• ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐฏ์ˆ˜๋ฅผ ๊ธฐ๋ก
        2. ์ˆซ์ž๊ฐ€ 2 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ขŒ, ์šฐ, ์ขŒ์šฐ ํƒ์ƒ‰ ๊ธฐ์ค€์œผ๋กœ ํ•ด๋‹น ๋ณ€์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ์ •์‚ฌ๊ฐํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋จ
    3. ์•„๋ž˜ ํ–‰๊นŒ์ง€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด๋ฅผ ๋ˆ„์ ํ•จ
        1. ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
2. ์ตœ๋Œ€ ์ •์‚ฌ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด 2, 3, 5 ์ค‘ ๋ฐ˜ํ™˜
solution(int[] mats, int[][] park) {
    int maxLength = 0;
    for (int i ; park.length) {
        for (int j ; park[0].length) {
            // 1 ์ฐพ๊ธฐ
                // ์ขŒ, ์ƒ, ์ขŒ์ƒ ํ™•์ธํ•˜๊ณ  +1 ํ•ด์ฃผ๊ธฐ
                // ํ•ด๋‹น ์นธ = min + 1
            // maxLength ๊ฐฑ์‹ 
        }
    }

    int answer = -1;
    for (int m : mats) {
        // m <= maxLength ์ผ ๊ฒฝ์šฐ answer ๊ฐฑ์‹ 
    }
    return answer;
}

 

 

๊ตฌํ˜„

class Solution {
    public int solution(int[] mats, String[][] park) {
        int n = park.length;
        int m = park[0].length;
        int[][] dp = new int[n][m];

        // ๊ณ„์‚ฐ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด String -> int ๋ณ€ํ™˜
        for (int i = 0;i < n; i++) {
            for (int j = 0;j < m; j++) {
                // -1 ์ฐพ๊ธฐ
                dp[i][j] = park[i][j].equals("-1") ? 1 : 0;
            }
        }

        int maxLength = 0;
        for (int i = 1;i < n; i++) {
            for (int j = 1;j < m; j++) {
                if (dp[i][j] > 0) {
                    // ์ขŒ, ์ƒ, ์ขŒ์ƒ ํ™•์ธํ•˜๊ณ  +1 ํ•ด์ฃผ๊ธฐ
                    int min = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]);
                    dp[i][j] = min + 1;
                    // maxLength ๊ฐฑ์‹ 
                    maxLength = Math.max(maxLength, min + 1);
                }
            }
        }

        int answer = -1;
        for (int mat : mats) {
            // answer < mat <= maxLength ์ผ ๊ฒฝ์šฐ answer ๊ฐฑ์‹ 
            if (answer < mat && mat <= maxLength) {
                answer = mat;
            }
        }
        return answer;
    }
}

 

 

๋ณต๊ธฐํ•˜๊ธฐ

๋‹ต์•ˆ๊ณผ ๋‚˜์˜ ํ’€์ด๋ฅผ ๋น„๊ตํ•ด๋ณด์„ธ์š”

  • ๋—์ž๋ฆฌ๋ฅผ max ๊ฐ’๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒŒ ๋” ๋นจ๋ฆฌ ๋๋‚œ๋‹ค.
  • ์ž…๋ ฅ๊ฐ’ ๋ถ„์„ํ•ด๋ณด๋ฉด ์ „์ฒดํƒ์ƒ‰๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. (n^2 * m^2 ์˜ ๊ฒฝ์šฐ 2500๋งŒ์ž„)

์š”์•ฝํ•˜๊ธฐ

  • ๊ฒฐ๊ตญ ๋งŽ์ด ํ’€๋ฉด ์‘์šฉ์ด ๋œ๋‹ค.
๋ฐ˜์‘ํ˜•