Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (Swift) ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜• ์ฐพ๊ธฐ (Lv.2)

๊ฐ์ž ๐Ÿฅ” 2023. 1. 23. 19:49
๋ฐ˜์‘ํ˜•

๐ŸŸ  ๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/12905?language=swift 

 

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

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

programmers.co.kr

 

๐ŸŸ  ํ’€์ด๋ฐฉ๋ฒ•

ํ’€์ด๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋‚ด๋Š”๋ฐ,,, ์ž˜ ์ƒ๊ฐ์ด ๋‚˜์ง€ ์•Š์•„์„œ ์ธํ„ฐ๋„ท์„ ์ฐพ์•„๋ดค๋‹ค ใ… ใ…  ์ด๋Ÿฐ ๋ฐ”๋ณด.. ๊ทธ๋ฆฌ๊ณ  ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•œ ๊ทœ์น™์ด์—ˆ๊ณ  ๋„๋Œ€์ฒด ์ด๋Ÿฐ๊ฑด ์–ด์ผ€ ์ƒ๊ฐํ•ด๋‚ด๋Š”๊ฑฐ์ง€,, ์‹ถ์—ˆ๋‹ค. ์ด์ œ ๋ฐฉ๋ฒ•์„ ์•Œ์•˜์œผ๋‹ˆ ๋‚˜์ค‘์— ์ž˜ ์จ๋จน์„ ์ˆ˜ ์žˆ๊ฒ ๊ตฐ...

์ด๋ ‡๊ฒŒ ํ•œ๋ณ€์”ฉ ๋”ํ•ด๊ฐ€๋ฉด์„œ ๋ชจ๋“  ๊ฐ’๋“ค์„ ๊ฐฑ์‹ ์‹œํ‚จ๋‹ค. (์—ฐ๋‘์ƒ‰์ด ๊ฐฑ์‹ ๋œ๊ฐ’)
์—ฐ๋‘์ƒ‰์œผ๋กœ ์“ฐ์ธ๊ณณ์˜ ๊ฐ’๋“ค์„ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ๋„“์ด๋ฅผ ์ฐพ๋Š”๋‹ค. (i, j)๋ผ๊ณ  ํ•˜๋ฉด, (i-1, j), (i, j-1), (i-1, j-1) ๋ถ€๋ถ„์˜ ๊ฐ’๋“ค์„ ๋ณด๊ณ , ์ตœ์†Œ ๊ฐ’์— +1 ์‹œํ‚จ ๊ฐ’์„ (i, j)์œ„์น˜์— ๊ฐฑ์‹ ์‹œ์ผœ์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‹ค๊ฐ€, ์—ฐ๋‘์ƒ‰ ๊ธ€์”จ๋กœ ์“ฐ์—ฌ์ง„ ๊ฒƒ๋“ค์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•์˜ ํ•œ๋ณ€์˜ ๊ธธ์ด๊ฐ€ ๋œ๋‹ค. ๊ทธ๋Ÿผ ์ •๋‹ต์€? ์ œ๊ณฑํ•ด์ฃผ๋ฉด ๋˜๊ฒ ์ง€!

๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ์ ์ด ํ•˜๋‚˜ ๋” ์žˆ์—ˆ๋‹ค. ๋งŒ์•ฝ (i, j)์˜ ์ž๋ฆฌ์˜ ๊ฐ’์ด 0์ด๋ผ๋ฉด, ๊ทธ ๋ถ€๋ถ„์€ ์ ˆ๋Œ€ ์ •์‚ฌ๊ฐํ˜•์ด ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋Ÿผ ๊ณผ๊ฐํžˆ ๋„˜๊ฒจ์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. ํ•ด๋‹น ๊ฐ’์€ ๊ฐฑ์‹ ์‹œํ‚ค๊ณ  ์ง„ํ–‰ํ•ด๋ฒ„๋ฆฌ๋ฉด,  ๊ฐ€์šด๋ฐ ๋ปฅ๋šซ๋ฆฐ ์ •์‚ฌ๊ฐํ˜•์ด ๋‚˜์˜ค๊ฒŒ ๋˜๊ฒ ์ง€!!

์ฆ‰, ์—ฐ๋‘์ƒ‰ ๊ธ€์”จ์ฑ„๋กœ ์žˆ๋Š” ๋ถ€๋ถ„์ธ (i, j)์˜ ๋ถ€๋ถ„์—๋Š” ํ˜„์žฌ ๋ณ€์˜ ๊ธธ์ด๋ฅผ ๊ฐฑ์‹ ์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ปฅ๋šซ๋ฆด ์ˆ˜ ์žˆ๋Š” 0์€ ๊ฐฑ์‹ ์‹œ์ผœ์ฃผ๋ฉด ์•ˆ๋œ๋‹ค!

๐ŸŸ  1๋ฒˆ ์ผ€์ด์Šค ์‹คํŒจ

์œ„์—์„œ ์ž‘์„ฑํ•œ ํ’€์ด ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทผ๋ฐ,, ํ•œ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ์‹คํŒจ๊ฐ€ ๋–ด๋‹ค ใ…  ใ…  ํšจ์œจ์„ฑ, ๋‹ค๋ฅธ ํ…Œ์ผ€๋“ค์€ ์ „๋ถ€ ํ†ต๊ณผ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์˜ˆ์™ธ์ผ€์ด์Šค ํ•˜๋‚˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๋œป์ธ๋ฐ.... ๋ญ˜๊นŒ?

์—ญ์‹œ,, ์ด๋ ‡๊ฒŒ ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์ฐพ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ํž˜๋“ค๋‹ค ใ… ใ…  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํ™ฉ์„ ์‚ดํŽด๋ณด๊ณ  ์ฐธ๊ณ ํ•œ ์ฝ”๋“œ๋„ ์‚ดํŽด๋ณด๊ณ  ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋ฉด์„œ ์—ด์‹ฌํžˆ ์ƒ๊ฐํ•ด๋ณธ ๊ฒฐ๊ณผ, ํ˜„์žฌ ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” ์ •๋‹ต์„ ๋งž์ถœ ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋๋‹ค.

์ด๋ ‡๊ฒŒ ํ˜„์žฌ ๋‚ด์ฝ”๋“œ๋Š” ํ•˜๋Š˜์ƒ‰ ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ์ •๋‹ต์„ ์ฐพ๋„๋ก ๋˜์–ด์žˆ๋‹ค. ์ด๊ฒŒ ์›์ธ์ด์—ˆ๊ตฐ!! ๊ณ ์ณ๋ณด์ž.

๐ŸŸ  ์ •๋‹ต์ฝ”๋“œ

์˜ค์˜ˆ ๋งž์•˜๋‹ค! ์œ„์ฒ˜๋Ÿผ ๋นจ๊ฐ„์ƒ‰ ๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋‹ˆ๊นŒ ๋งž์•˜๋‹ค! ์ด๋ ‡๊ฒŒ ์˜ˆ์™ธ์ผ€์ด์Šค? ํ˜น์€ ์–ด๋–ค๊ฑธ ํ‹€๋ ธ๋Š”์ง€ ์ฐพ์•˜์„๋•Œ ์ •๋ง ํฌ์—ด์ด ๋„˜์นœ๋‹ค ํ›„ํ›„

import Foundation

func solution(_ board:[[Int]]) -> Int {
    var answer: Int = 0
    var newBoard = Array(repeating: Array(repeating: 0, count: board[0].count+1), count: board.count+1)

    for i in 0..<board.count {
        for j in 0..<board[i].count {
            newBoard[i+1][j+1] = board[i][j]
        }
    }

    for i in 1..<newBoard.count {
        for j in 1..<newBoard[i].count {
            if newBoard[i][j] != 0 {
                newBoard[i][j] = min(newBoard[i][j-1], newBoard[i-1][j], newBoard[i-1][j-1]) + 1
                answer = max(newBoard[i][j], answer)
            }
        }
    }
    return answer * answer
}

 

๋ฐ˜์‘ํ˜•