๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ์•ˆ์ „ ์˜์—ญ BOJ #2468

by seolhee2750 2021. 10. 12.
๋ฌธ์ œ ์„ค๋ช…

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

์–ด๋–ค ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๋Š” ํ–‰๊ณผ ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ฐ๊ฐ N์ธ 2์ฐจ์› ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง€๋ฉฐ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” ํ•ด๋‹น ์ง€์ ์˜ ๋†’์ด๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์€ N=5์ธ ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด์ด๋‹ค.

 

์ด์ œ ์œ„์™€ ๊ฐ™์€ ์ง€์—ญ์— ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ ค์„œ ๋†’์ด๊ฐ€ 4 ์ดํ•˜์ธ ๋ชจ๋“  ์ง€์ ์ด ๋ฌผ์— ์ž ๊ฒผ๋‹ค๊ณ  ํ•˜์ž. ์ด ๊ฒฝ์šฐ์— ๋ฌผ์— ์ž ๊ธฐ๋Š” ์ง€์ ์„ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์ด๋ผ ํ•จ์€ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์ง€์ ๋“ค์ด ์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ํ˜น์€ ์™ผ์ชฝ์œผ๋กœ ์ธ์ ‘ํ•ด ์žˆ์œผ๋ฉฐ ๊ทธ ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€์ธ ์˜์—ญ์„ ๋งํ•œ๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ์—์„œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์€ 5๊ฐœ๊ฐ€ ๋œ๋‹ค(๊ผญ์ง“์ ์œผ๋กœ๋งŒ ๋ถ™์–ด ์žˆ๋Š” ๋‘ ์ง€์ ์€ ์ธ์ ‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ทจ๊ธ‰ํ•œ๋‹ค). 

๋˜ํ•œ ์œ„์™€ ๊ฐ™์€ ์ง€์—ญ์—์„œ ๋†’์ด๊ฐ€ 6์ดํ•˜์ธ ์ง€์ ์„ ๋ชจ๋‘ ์ž ๊ธฐ๊ฒŒ ๋งŒ๋“œ๋Š” ๋งŽ์€ ๋น„๊ฐ€ ๋‚ด๋ฆฌ๋ฉด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ์™€ ๊ฐ™์ด ๋„ค ๊ฐœ๊ฐ€ ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

์™€ ๊ฐ™์ด ์žฅ๋งˆ์ฒ ์— ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ผ์„œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋Š” ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ์˜ˆ์™€ ๊ฐ™์€ ์ง€์—ญ์—์„œ ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ์กฐ์‚ฌํ•ด ๋ณด๋ฉด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜ ์ค‘์—์„œ ์ตœ๋Œ€์ธ ๊ฒฝ์šฐ๋Š” 5์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ค ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์žฅ๋งˆ์ฒ ์— ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 

 

์ž…๋ ฅ

์™€ ๊ฐ™์ด ์žฅ๋งˆ์ฒ ์— ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ผ์„œ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋Š” ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ์˜ˆ์™€ ๊ฐ™์€ ์ง€์—ญ์—์„œ ๋‚ด๋ฆฌ๋Š” ๋น„์˜ ์–‘์— ๋”ฐ๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ์กฐ์‚ฌํ•ด ๋ณด๋ฉด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ๊ฐœ์ˆ˜ ์ค‘์—์„œ ์ตœ๋Œ€์ธ ๊ฒฝ์šฐ๋Š” 5์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์žฅ๋งˆ์ฒ ์— ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ์•ˆ์ „ํ•œ ์˜์—ญ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

์ž…๋ ฅ

5
6 8 2 6 2
3 2 3 4 6
6 7 3 3 2
7 2 5 3 6
8 9 5 2 7

์ถœ๋ ฅ

5

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
let n = Int(readLine()!)!
var area = [[Int]]() 
var heights = [Int]() 

for _ in 0..<n {
    area.append(readLine()!.split(separator: " ").map({Int(String($0))!}))
    for i in 0..<n {
        if !heights.contains(area[area.count-1][i]) { heights.append(area[area.count-1][i]) }
    }
}

heights.sort() // heights ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

var count = 0
var max = 1
let area_fix = area

// dfs ํ•จ์ˆ˜
func dfs(_ x: Int, _ y: Int, _ now_h: Int) {
    if x < 0 || y < 0 || x >= n || y >= n || area[x][y] <= now_h { return } // ์˜ˆ์™ธ
    
    area[x][y] = now_h // ์ด๋ฏธ ์ฒดํฌํ•œ ์ž๋ฆฌ๋Š” ํ˜„์žฌ ๋น„์˜ ๋†’์ด์™€ ๋™์ผํ•˜๊ฒŒ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
    
    // ์žฌ๊ท€ ํ˜ธ์ถœ
    dfs(x+1, y, now_h)
    dfs(x-1, y, now_h)
    dfs(x, y+1, now_h)
    dfs(x, y-1, now_h)
}

// ๋ฉ”์ธ ์‹คํ–‰๋ฌธ
for i in heights {
    let h = i // ํ˜„์žฌ ๋ฐ˜๋ณต์—์„œ ํ™•์ธํ•  ๋น„์˜ ๋†’์ด
    
    for x in 0..<n {
        for y in 0..<n {
            if area[x][y] > h { // ํ˜„์žฌ ์ง€์ ์ด ๋น„์˜ ๋†’์ด๋ณด๋‹ค ๋†’์„ ๊ฒฝ์šฐ
                count += 1
                dfs(x, y, h)
            }
        }
    }
    
    if max < count { max = count }
    count = 0
    area = area_fix
}

print(max)

๐Ÿ‘‰ dfs ๋ฌธ์ œ๋กœ, ์ง€์ ๋งˆ๋‹ค์˜ ๋†’์ด๋ฅผ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•˜์—ฌ ๊ทธ์— ๋งž๋Š” ๊ฐ•์ˆ˜๋Ÿ‰์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ!

์ด ๋ฌธ์ œ๋Š” ์ด์ „์˜ ์‹ค๋ฒ„ ๋ฌธ์ œ๋“ค์— ๋น„ํ•ด์„œ ์ชผ๊ธˆ ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ,

[๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋†’์€ ์ง€์ ]๊ณผ [๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋‚ฎ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ง€์ ]์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋งˆ์น˜ 0, 1์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ณ  ํ’€๋ฉด ์‰ฝ๋‹ค.

๋งจ ์œ„๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

[๋ณ€์ˆ˜ ์„ ์–ธ]

  • area๋Š” ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ์–ธํ–ˆ๊ณ ,
    heights๋Š” ์ง€์ ๋“ค ์ค‘ ์–ด๋–ค ๋†’์ด๋“ค์ด ์žˆ๋Š”์ง€ ์ค‘๋ณต ์—†์ด ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ ์–ธํ–ˆ๋‹ค.
    (๋ฌธ์ œ์—์„œ ์ง€์ ๋“ค์˜ ๋†’์ด๋Š” 1๋ถ€ํ„ฐ 100๊นŒ์ง€๋ผ๊ณ  ํ–ˆ๊ณ , ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋†’์ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ
    ๊ตณ์ด ๋ชจ๋“  ๋น„์˜ ๋†’์ด๋“ค์„ ํƒ์ƒ‰ํ•ด ์ค„ ํ•„์š” ์—†์ด ์ฃผ์–ด์ง„ ๋†’์ด๋“ค ๋งŒํผ๋งŒ ํ™•์ธํ•ด์ฃผ๋ฉด๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธํ•˜์˜€์Œ)
  • 2์ค‘ for๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ area์— ์ž…๋ ฅ ๊ฐ’์„ ๋„ฃ์–ด์คŒ๊ณผ ๋™์‹œ์—
    contains๋ฅผ ์‚ฌ์šฉํ•ด ์ค‘๋ณต๊ฒ€์‚ฌ๋ฅผ ํ•˜๋ฉด์„œ heights ๋ฐฐ์—ด๊นŒ์ง€ ํ•จ๊ป˜ ์™„์„ฑํ•ด์ฃผ์—ˆ๋‹ค.
  • ์™„์„ฑํ•œ heights ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ฐ•์ˆ˜๋Ÿ‰๋ณ„๋กœ bfs ํƒ์ƒ‰์„ ํ•ด ์ค„ ์˜ˆ์ •์ด๋ฏ€๋กœ,
    ๊ฐ•์ˆ˜๋Ÿ‰ ๋ณ„ ์•ˆ์ „์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋กœ count๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๊ณ 
    ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ถœ๋ ฅํ•  ์ตœ๋Œ€ ์•ˆ์ „ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด์„ max ๋ณ€์ˆ˜๋„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
    (max์—๋Š” 1์„ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ, ๋น„๊ฐ€ ์ „ํ˜€ 0๋งŒํผ ์˜ฌ ๊ฒฝ์šฐ์—๋Š” ์•ˆ์ „ ์˜์—ญ์ด 1์ด๋ฏ€๋กœ
    ์•„๋ฌด๋ฆฌ ์ž‘์€ ๊ฐ’์ด๋ผ๋„ ์ตœ๋Œ“๊ฐ’์€ 1 ์ด์ƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์—ˆ๋‹ค.)
    ๊ทธ๋ฆฌ๊ณ  dfs ํ•จ์ˆ˜๋ฅผ ๋Œ๋ฆด ๋•Œ area ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝ์‹œ์ผœ์ฃผ๋ฉด์„œ ํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ
    ์ดˆ๊ธฐ์˜ area ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ด๋†“๊ธฐ ์œ„ํ•ด area_fix ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

[dfs ํ•จ์ˆ˜]

  • ํ˜„์žฌ ์œ„์น˜ ๊ฐ’ x, y์™€ ํ˜„์žฌ ๊ฐ•์ˆ˜๋Ÿ‰ now_h๋ฅผ ๋ฐ›์•„์˜ค๋Š” dfs๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • x, y๊ฐ€ ์ง€์—ญ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ์œ„์น˜ ๊ฐ’์ด๊ฑฐ๋‚˜ area[x][y]๊ฐ€ now_h๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์˜ˆ์™ธ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.
    ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” [๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋†’์€ ์ง€์ ]๊ณผ [๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋‚ฎ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ง€์ ] ์ด๋ ‡๊ฒŒ
    ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์„œ ๋ณผ ์˜ˆ์ •์ธ๋ฐ, [๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋‚ฎ๊ฑฐ๋‚˜ ๊ฐ™์€ ์ง€์ ]์ผ ๊ฒฝ์šฐ๋Š” ์•ˆ์ „ ์˜์—ญ์ด ์•„๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ ์•ˆ์ „ ์˜์—ญ์ด ์•„๋‹Œ ๊ณณ์€ ํƒ์ƒ‰์„ ์ด์–ด๊ฐˆ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ํƒ์ƒ‰์ค‘์ธ area[x][y] ์ง€์ ์€ now_h๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.
    ์œ„์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์—์„œ ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ํ˜„ ์ง€์ ์€ ์•ˆ์ „ ์˜์—ญ์ด๋ผ๋Š” ๋œป์ธ๋ฐ, ์ด๊ฑธ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด
    ์žฌ๊ท€ ํ˜ธ์ถœ์ด ๊ณ„์† ๋ฐ˜๋ณต๋˜๋ฉด์„œ ๊ฐ™์€ ๊ณณ์„ ๊ณ„์† ํƒ์ƒ‰ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.
    ๋”ฐ๋ผ์„œ ์ด๋ฏธ ์ฒดํฌํ•œ ์ง€์ ์€ ์•ˆ์ „ ์˜์—ญ์—์„œ ์ œ์™ธ์‹œ์ผœ์„œ ์ค‘๋ณต์„ ํ”ผํ•ด์ค€๊ฒƒ์ด๋‹ค.
  • ์ƒ, ํ•˜, ์ขŒ, ์šฐ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ง€์ ์„ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ์žฌ๊ท€ํ˜ธ์ถœํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ด์–ด์ง„ ์•ˆ์ „ ์ง€์ ๋“ค์ด ๋ชจ๋‘ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์˜์—ญ์œผ๋กœ ๋ฐ”๋€Œ๋ฉด dfs ํ•จ์ˆ˜๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ๋‹ค.

[๋ฉ”์ธ ์‹คํ–‰]

  • ์œ„์—์„œ ๋งŒ๋“ค์—ˆ๋˜ heights ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ–ˆ๋‹ค.
    ๋ฐ˜๋ณต๋งˆ๋‹ค h ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ๊ฐ•์ˆ˜๋Ÿ‰์„ ๋‹ฌ๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค.
  • 2์ค‘ for๋ฌธ์œผ๋กœ ๋ชจ๋“  ์ง€์ ์„ ์ฒดํฌํ•ด์ฃผ์—ˆ๊ณ ,
    ๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋†’์€ ์ง€์ ์„ ๋งŒ๋‚˜๋ฉด (์•ˆ์ „ ์˜์—ญ์„ ๋งŒ๋‚˜๋ฉด) dfs ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค.
    ํ•œ ๋ฒˆ ์•ˆ์ „ ์˜์—ญ์„ ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์•ˆ์ „ ์˜์—ญ์„ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ ์นด์šดํŠธํ–ˆ๋‹ค.
  • ์œ„์˜ 2์ค‘ for๋ฌธ์—์„œ ๊ตฌํ•œ ์•ˆ์ „ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๊ฐ€ max๋ณด๋‹ค ํด ๊ฒฝ์šฐ max๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๊ฐ•์ˆ˜๋Ÿ‰์—์„œ์˜ ์•ˆ์ „ ์˜์—ญ ๊ฐœ์ˆ˜๋ฅผ ๋˜ ๊ตฌํ•ด์ค˜์•ผํ•˜๋ฏ€๋กœ ์นด์šดํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.
    dfs ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ area ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด์„œ ํƒ์ƒ‰ํ•ด์ฃผ์—ˆ์œผ๋ฏ€๋กœ,
    area ๋ฐฐ์—ด์„ ๋‹ค์‹œ ์›์ƒ๋ณต๊ท€ํ•˜๊ธฐ ์œ„ํ•ด area์— area_fix๋ฅผ ํ• ๋‹นํ•ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ด์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋“ค์— ๋น„ํ•ด์„œ ์กฐ๊ธˆ ๋” ์ƒ๊ฐํ•ด์ค„ ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•˜๋˜ ๋ฌธ์ œ์˜€๋‹ค.
    ๊ทธ๋ž˜๋„ ์กฐ๊ธˆ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ์ „ํ˜•์ ์ธ dfs๋ฌธ์ œ์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š” ์œ ํ˜•์ด์—ˆ๊ณ , ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.

 


๋ฌธ์ œ

https://www.acmicpc.net/problem/2468

๋Œ“๊ธ€