๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 2468๋ฒˆ : ์•ˆ์ „ ์˜์—ญ (Python/Silver 1)

devCloud 2023. 9. 6. 17:46
728x90
 

2468๋ฒˆ: ์•ˆ์ „ ์˜์—ญ

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

www.acmicpc.net


์„ค๋ช…

๐ŸŒŸ ๋ฌธ์ œ ํ•ต์‹ฌ - ์•ˆ์ „ ์˜์—ญ์ด ์ตœ๋Œ€์ธ ๊ฒƒ์„ ๊ตฌํ•˜๋ผ.
๋‚˜๋„ ์ฒ˜์Œ์—” ๋ฌด์Šจ ์†Œ๋ฆฌ์ธ๊ฐ€ ํ–ˆ๋Š”๋ฐ, ์˜์—ญ์ด๋ผ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ•์ˆ˜๋Ÿ‰์€ ์ฃผ์–ด์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ชจ๋“  ๊ฐ•์ˆ˜๋Ÿ‰์„ ๋”ฐ์ ธ์•ผ ํ•œ๋‹ค. 
 
๋‹ค์Œ๊ณผ ๊ฐ™์ด N = 5์ธ ์ง€์—ญ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž.

 

 

์˜์—ญ์€ ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ, ์œ„, ์•„๋ž˜๊ฐ€ ์ด์–ด์ ธ ์žˆ์œผ๋ฉด ํ•œ ์˜์—ญ์œผ๋กœ ๋ณธ๋‹ค.

๋งŒ์•ฝ, ๊ฐ•์ˆ˜๋Ÿ‰์ด 0์ผ ๋•Œ ๋น„๊ฐ€ ์˜ค์ง€ ์•Š์Œ์„ ๋œปํ•˜๋ฏ€๋กœ ์ž ๊ธฐ๋Š” ๊ณณ์€ ์—†๋‹ค. ์™ผ, ์˜ค, ์œ„, ์•„๋ž˜๊ฐ€ ๋‹ค ์ด์–ด์ ธ์žˆ์œผ๋ฉด ํ•˜๋‚˜์˜ ์˜์—ญ์œผ๋กœ ๋ณธ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ์•ˆ์ „ ์˜์—ญ์€ 1์ด๋‹ค. 
 

 

 

 

 

๋งŒ์•ฝ, ๊ฐ•์ˆ˜๋Ÿ‰์ด 4์ผ ๋•Œ ๋†’์ด๊ฐ€ 4์ดํ•˜์ธ ์ง€์—ญ์€ ์ž ๊ธด๋‹ค. ๋”ฐ๋ผ์„œ ์ž ๊ธด ๊ณณ์„ ์น ํ•˜๊ณ  ๋‚จ์€ ์˜์—ญ์„ ๋ณด๋ฉด, ์ด 5๊ณณ์ด๋‹ค. 

(๊ฐ•์ˆ˜๋Ÿ‰์ด 3์ผ ๋•Œ๋Š” ์•ˆ์ „ ์˜์—ญ์ด ์ด 4๊ฐœ๊ฐ€ ๋œ๋‹ค.)

 

 

 

 

 

๋งŒ์•ฝ, ๊ฐ•์ˆ˜๋Ÿ‰์ด 6์ผ ๋•Œ ๋†’์ด๊ฐ€ 6์ดํ•˜์ธ ๊ณณ์€ ๋ชจ๋‘ ์ž ๊ธด๋‹ค. ๊ทธ๋ž˜์„œ ๋‚จ์€ ์˜์—ญ์€ ์ด 4๊ณณ์ด๋‹ค. 

๊ฐ•์ˆ˜๋Ÿ‰์ด 6์ด์ƒ์ด ๋˜๋ฉด ์•ˆ์ „ ์˜์—ญ์€ ์ ์  ์ค„์–ด๋“ค ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ•์ˆ˜๋Ÿ‰์ด 4์ผ ๋•Œ๊ฐ€ ์•ˆ์ „ ์˜์—ญ์˜ ์ˆ˜๊ฐ€ ์ตœ๋Œ€์ด๋ฏ€๋กœ ์•ˆ์ „ ์˜์—ญ์˜ ์ˆ˜๋Š” 5์ด๋‹ค.

 

 

 

 

ํ’€์ด

โœ“ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ - BFS ํ’€์ด

 

https://dev-cloud.tistory.com/161 -> ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ด๋‹ค. BFS์™€ ๊ด€๋ จํ•ด์„œ ๋” ์ž์„ธํ•œ ์„ค๋ช…์ด ์žˆ์œผ๋‹ˆ ๋ด๋ณด์ž.

Solution

#15:55 - 16:47 ์ดํ›„ ํ’€์ด๋ด„->๋ณด์™„์ ์ด ์ข€ ํ•„์š”ํ–ˆ์Œ. ๋ณด์™„ํ•˜๊ณ  ์ œ์ถœํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ ๊ฑธ๋ฆผ)
#๋ฌธ์ œ ์ดํ•ด ์™„๋ฃŒ(30๋ถ„์ด๋‚˜ ๊ฑธ๋ ธ๋‹ค... ์˜์—ญ์ด๋ผ๋Š” ๊ฑธ ์ƒ๊ฐ ๋ชปํ–ˆ๋‹ค.)

import sys
input = sys.stdin.readline
#bfs๋ฅผ ์œ„ํ•ด deque ์ž„ํฌํŠธ
from collections import deque
N = int(input())
area = [list(map(int, input().split())) for _ in range(N)]
#์ตœ๋Œ€ ๋†’์ด ์ฐพ๊ธฐ
max_value = max(map(max, area)) 
#์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]

def bfs(rain, x, y): #rain = ๊ฐ•์ˆ˜๋Ÿ‰
    '''#์ด๊ฑธ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ต์€ ๋‚˜์˜ค๋‚˜ ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚˜์˜ด
    # for๋ฌธ์œผ๋กœ area๋ฅผ ๋‹ค ๋Œ์•„์„œ ๊ฐ•์ˆ˜๋Ÿ‰๋ณด๋‹ค ๋‚ฎ์€ ๊ณณ์„ checkํ‘œ์‹œํ•ด
    for i in range(N):
        for j in range(N):
            if area[i][j] <= rain:
                area[i][j] = -1 #์ž ๊ฒผ์Œ์„ ๋‚˜ํƒ€๋ƒ„
   '''
    q = deque()
    q.append((x, y))
    visited[x][y] = 1
    while q:
        x, y = q.popleft()

        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y

            if -1 < nx < N and -1 < ny < N:
                if area[nx][ny] > rain and visited[nx][ny] == 0:
                    visited[nx][ny] = 1  # ๋ฐฉ๋ฌธ์ฒดํฌ ํ›„ ํ์— ๋„ฃ์Œ
                    q.append((nx, ny))


res = []
for rain in range(max_value):
    cnt = 0
    visited = [[0 for _ in range(N)] for _ in range(N)]  # ๋ฐฉ๋ฌธ ํ‘œ์‹œ
    for i in range(N):
        for j in range(N):
            #์ž ๊ธฐ๋Š” ๊ณณ์€ ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฉด์„œ ์ž ๊ฒผ๋‹ค๋Š” ํ‘œ์‹œ ํ•˜์ง€๋ง๊ณ  ํ•ด๋‹น๋˜๋Š” ๊ณณ๋งŒ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.
            if visited[i][j] == 0 and area[i][j] > rain:
                bfs(rain, i, j)
                cnt += 1
    res.append(cnt)
print(max(res))
728x90