์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 2468 ๐Ÿฅˆ] ์•ˆ์ „ ์˜์—ญ

1eehyunji 2023. 8. 8. 01:32

๋ฌธ์ œ

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

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

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

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๊ฐœ๊ฐ€ ๋œ๋‹ค(๊ผญ์ง“์ ์œผ๋กœ๋งŒ ๋ถ™์–ด ์žˆ๋Š” ๋‘ ์ง€์ ์€ ์ธ์ ‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ทจ๊ธ‰ํ•œ๋‹ค).

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

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์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์–ด๋–ค ์ง€์—ญ์„ ๋‚˜ํƒ€๋‚ด๋Š” 2์ฐจ์› ๋ฐฐ์—ด์˜ ํ–‰๊ณผ ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. N์€ 2 ์ด์ƒ 100 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ๊ฐ ์ค„์—๋Š” 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ N๋ฒˆ์งธ ํ–‰๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ํ•œ ํ–‰์”ฉ ๋†’์ด ์ •๋ณด๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค. ๊ฐ ์ค„์—๋Š” ๊ฐ ํ–‰์˜ ์ฒซ ๋ฒˆ์งธ ์—ด๋ถ€ํ„ฐ N๋ฒˆ์งธ ์—ด๊นŒ์ง€ N๊ฐœ์˜ ๋†’์ด ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ž…๋ ฅ๋œ๋‹ค. ๋†’์ด๋Š” 1์ด์ƒ 100 ์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

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

๋ฌธ์ œํ’€์ด

import sys
from collections import deque

n=int(sys.stdin.readline())

maxheight=-1e9
minheight=1e9
heights=[]
for _ in range(n):
    tmp=list(map(int, sys.stdin.readline().strip().split(' ')))
    maxheight=max(maxheight, max(tmp))
    minheight=min(minheight, min(tmp))
    heights.append(tmp)

def bfs_find_safezone(y,x,h):
    global heights, visited
    queue=deque()
    queue.append((y,x))
    directions=[(0,1),(1,0),(0,-1),(-1,0)]
    while queue:
        cury, curx=queue.popleft()
        for di in directions:
            dy=cury+di[0]
            dx=curx+di[1]
            if 0<=dy<n and 0<=dx<n and visited[dy][dx]==0 and heights[dy][dx]>h:
                queue.append((dy,dx))
                visited[dy][dx]=1

ans=0
for h in range(minheight-1, maxheight):
    visited=[[0]*n for _ in range(n)]
    safezone_number=0
    for i in range(n):
        for j in range(n):
            # h๋ณด๋‹ค ๋” ๋†’์€ ๊ฑด๋ฌผ์€ ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
            if heights[i][j]>h and visited[i][j]==0:
                visited[i][j]=1
                bfs_find_safezone(i,j,h)
                safezone_number+=1
    ans=max(ans, safezone_number)


print(ans)
  • ์ง€์—ญ์˜ ๋†’์ด ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด์„œ, ๊ฐ€์žฅ ํฐ ์ง€์—ญ ๋†’์ด maxheight ์™€ ๊ฐ€์žฅ ์ž‘์€ ์ง€์—ญ ๋†’์ด minheight๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๊ฐ€์žฅ ์ž‘์€ ์ง€์—ญ ๋†’์ด๋ณด๋‹ค 1 ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ(์ง€์—ญ์ด ๋ชจ๋‘ ์ž ๊ธฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) ๊ฐ€์žฅ ํฐ ์ง€์—ญ ๋†’์ด๋ณด๋‹ค 1 ์ž‘์€ ์ˆ˜๊นŒ์ง€(๊ฐ€์žฅ ๋†’์€ ์ง€์—ญ์„ ์ œ์™ธํ•˜๊ณ  ์ง€์—ญ์ด ๋ชจ๋‘ ์ž ๊ธฐ๋Š” ๊ฒฝ์šฐ) ๋น„๊ฐ€ ์™€์„œ ์ฐจ์˜ค๋กœ๋Š” ๋†’์ด๋กœ ๋‘๊ณ  for ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.
  • ์ด ๋ถ€๋ถ„์—์„œ ์ƒ๊ฐ์น˜ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์ฒ˜์Œ์— ํ†ต๊ณผ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค. ์ฒ˜์Œ์— minheight ๋ถ€ํ„ฐ maxheight-1๊นŒ์ง€ ๋ฐ˜๋ณตํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
2
1 1
1 1
# ๋‹ต : 1
# ์ถœ๋ ฅ : 0

์œ„ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ minheight์™€ maxheight๊ฐ€ ๋ชจ๋‘ 1์ด ๋˜์–ด์„œ for๋ฌธ ๋ฐ˜๋ณต ์ž์ฒด๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ans์˜ ์ดˆ๊ธฐ๊ฐ’์ธ 0์ด ์ถœ๋ ฅ๋œ๋‹ค.

ํ•˜์ง€๋งŒ 0.1~0.9์˜ ๋†’์ด๋งŒํผ ์ฐจ์˜ค๋ฅผ ๊ฒฝ์šฐ ๋ชจ๋“  ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์•„์„œ ์•ˆ์ „ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1์ด ๋˜๋ฏ€๋กœ 0์€ ์•ˆ์ „ ์˜์—ญ ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’์ด ์•„๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ minheight๋ณด๋‹ค 1 ์ž‘์€ ๋†’์ด๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์„œ ๋ชจ๋“  ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ํƒ์ƒ‰ํ•ด์ฃผ๋„๋ก ๋ฐ”๊ฟจ๋”๋‹ˆ ํ†ต๊ณผ๊ฐ€ ๋๋‹ค.

  • ์ดํ›„๋Š” ์ „ํ˜•์ ์ธ bfs๋ฅผ ํ†ตํ•ด์„œ ์˜์—ญ ๊ตฌํ•˜๊ธฐ์ธ๋ฐ, ๊ฐ ๋†’์ด๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋งˆ๋‹ค visited ๋ฐฐ์—ด์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๊ณ  ํ˜„์žฌ ๋น—๋ฌผ์˜ ๋†’์ด๋ณด๋‹ค ํฐ ์ง€์—ญ์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ bfs๋ฅผ ์ด์šฉํ•ด์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ์—ฐ๊ฒฐ๋œ ์ง€์—ญ์„ ๋Œ๋ฉด์„œ ํ•ด๋‹น ์ง€์—ญ์˜ visited ๋ฐฐ์—ด ๊ฐ’์„ 1๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด์„œ ํ˜„์žฌ ๋น—๋ฌผ ๋†’์ด๋ณด๋‹ค ๋†’์€ ์ง€์—ญ์„ ๋ฐœ๊ฒฌํ•  ๊ฒฝ์šฐ ์•ˆ์ „ ์˜์—ญ(๋ณ€์ˆ˜ safezone)์˜ ๊ฐœ์ˆ˜๋ฅผ +1 ํ•ด์ค€๋‹ค.
  • ๊ฐ ๋น—๋ฌผ์˜ ๋†’์ด๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋งˆ์น  ๋•Œ๋งˆ๋‹ค ans์— ์ €์žฅ๋œ ์•ˆ์ „ ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋” ํฐ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋งˆ์นœ ํ›„์— ans๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.