glowing713
Frontend-Deep-Dive
glowing713
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
    • Languages (11)
      • JavaScript ๐Ÿ’› (3)
      • Python ๐Ÿ (4)
      • Java โ˜•๏ธ (3)
      • Swift ๐Ÿงก (1)
    • Computer_Science (1)
      • Computer_Network ๐Ÿ•ธ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring ๐Ÿ€ (1)
    • AI (2)
      • NLP ๐Ÿ—ฃ (1)
      • AI_Math โž— (1)
    • ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊พธ๋ฏธ๊ธฐ โœŒ (1)
    • ์ƒ๊ฐ์ •๋ฆฌ โœ๐Ÿป (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ปGithub

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • DP
  • BOJ
  • Baekjoon
  • ์™„์ „ํƒ์ƒ‰
  • Python
  • Stack
  • binary search
  • Algorithm
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • bfs
  • c++
  • mst
  • ps
  • 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ
  • ์นด์นด์˜ค ๊ธฐ์ถœ
  • ๋™์ ๊ณ„ํš๋ฒ•
  • ์ด๋ถ„ํƒ์ƒ‰
  • boostcampaitech
  • Java
  • brute-force

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
glowing713

Frontend-Deep-Dive

[BOJ] ๋ฐฑ์ค€ 2573 ๋น™์‚ฐ / BFS
Problem_Solving

[BOJ] ๋ฐฑ์ค€ 2573 ๋น™์‚ฐ / BFS

2021. 1. 14. 15:53

์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฌธ์ œ ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ญ ๋ฌธ์ œ ์ดํ•ด

ํ•œ ๋ฉ์–ด๋ฆฌ์˜ ๋น™์‚ฐ์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

๋งค๋…„, ๋น™์‚ฐ์˜ ์‚ฌ๋ฐฉ์œผ๋กœ ์ ‘ํ•œ ๋ฐ”๋‹ค๋ฉด(0)์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋…น์•„๋‚ด๋ฆฐ๋‹ค.

ํ•ด๋งˆ๋‹ค ๋…น์•„๋‚ด๋ฆฌ๋‹ค๋ณด๋ฉด ์–ด๋А ์‹œ์ ์— ๋น™์‚ฐ์ด ๋Š์–ด์ง€๋ฉฐ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ 2๋…„์ด ์ง€๋‚˜๋ฉด(๋‘ ๋ฒˆ ๋…น์œผ๋ฉด) ๋ฉ์–ด๋ฆฌ๊ฐ€ ์„ธ ๋ฉ์–ด๋ฆฌ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค.

๋ช‡ ๋…„์ด ์ง€๋‚˜๋ฉด ๋น™์‚ฐ์ด ๋‘ ๋ฉ์–ด๋ฆฌ ์ด์ƒ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

1. ๋น™์‚ฐ์„ ๋…น์ธ๋‹ค.

2. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ํ•˜๋ฉฐ ๋ฉ์–ด๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ณธ๋‹ค.

3. ๋‘ ๋ฉ์–ด๋ฆฌ ์ด์ƒ์œผ๋กœ ๋‚˜๋‰˜๊ฑฐ๋‚˜, ๋” ์ด์ƒ ๋‚จ์€ ๋น™์‚ฐ์ด ์—†๋‹ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

โ—๏ธ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ๋†“์ณค๋˜ ํฌ์ธํŠธ๋Š” ๋น™์‚ฐ์„ ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ ๋…น์ด๋ฉด ์ž˜๋ชป ๊ณ„์‚ฐํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

 

๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด,,

 

- ๋จผ์ € (1, 1) ์œ„์น˜์˜ ๋†’์ด 2์ธ ๋น™์‚ฐ์€ ์™ผ์ชฝ๊ณผ ์œ„์ชฝ์ด ๋ฐ”๋‹ท๋ฌผ์ด๋ฏ€๋กœ 1๋…„์ด ์ง€๋‚˜๋ฉด ๋ชจ๋‘ ๋…น์•„ 0์ด ๋œ๋‹ค.

  ๋ฌผ          
๋ฌผ 2 => 0 4 5 3    
  3   2 5 2  
  7 6 2 4    
             

- ๊ทธ ์ƒํƒœ์—์„œ ๊ทธ๋Œ€๋กœ (1, 2) ์œ„์น˜์˜ ๋†’์ด 4์ธ ๋น™์‚ฐ์„ ๊ณ„์‚ฐํ•˜๋ฉด 3๋ฉด์ด ๋ฐ”๋‹ค์ด๋ฏ€๋กœ(ํ•œ๋ฐ˜๋„..?) 1์ด ๋œ๋‹ค.

    ๋ฌผ        
  ๋ฌผ 4 => 1 5 3    
  3 ๋ฌผ 2 5 2  
  7 6 2 4    
             

- ๊ทธ๋Ÿฌ๋‚˜ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ฌธ์ œ ์กฐ๊ฑด์€ ์ดˆ๊ธฐ ์ƒํƒœ ๊ทธ๋Œ€๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฏ€๋กœ ์œ„์ชฝ๊ณผ ์•„๋ž˜์ชฝ์ด ๋ฐ”๋‹ค์ธ -2๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค.

    ๋ฌผ        
  2 4 => 2 5 3    
  3 ๋ฌผ 2 5 2  
  7 6 2 4    
             

 

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งค๋…„ ๋…น๋Š” ๋น™์‚ฐ์„ ๊ณ„์‚ฐํ•  ๋•Œ, ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณต์‚ฌํ•ด๋‘๊ณ (cp_world) ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น™์‚ฐ์˜ ๋…น๋Š” ์–‘์„ ๊ณ„์‚ฐํ–ˆ๋‹ค.

 

 

๊ตฌํ˜„ ์–ธ์–ด: Python

 

from collections import deque
from sys import stdin
import copy


# ๋น™์‚ฐ์˜ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋…น์„ ์ง€ ๊ณ„์‚ฐ
# ์ƒํ•˜์ขŒ์šฐ ๋„ค ๋ฐฉํ–ฅ ์ค‘ ๋ฌผ์ด ์žˆ๋Š” ๋ฉด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
def oceans(t_x, t_y):
    ocean_cnt = 0
    for k in range(4):
        nx = t_x + mx[k]
        ny = t_y + my[k]
        # ๋„ค ๋ฐฉํ–ฅ ์ค‘ ๋ฐ”๋‹ค๋ฅผ ์ฐพ์œผ๋ฉด +1
        if cp_world[nx][ny] == 0:
            ocean_cnt += 1
    return ocean_cnt


# ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋น™์‚ฐ ๋ฉ์–ด๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
def bfs():
    groups = 0    # ๋ฉ์–ด๋ฆฌ ๊ฐœ์ˆ˜
    queue = deque()
    visited = [[False] * m for _ in range(n)]    # ๋ฐฉ๋ฌธ ์ฒดํฌ
    
    for a in range(1, n-1):
        for b in range(1, m-1):
            # ์ด์ „์— ๋ฐฉ๋ฌธํ•œ ์  ์—†๋Š” ๋น™์‚ฐ์„ ์ฐพ์•˜์„ ๋•Œ ๊ฑฐ๊ธฐ์—์„œ ๋ฉ์–ด๋ฆฌ ํƒ์ƒ‰ ์‹œ์ž‘
            if world[a][b] > 0 and not visited[a][b]:
                groups += 1
                queue.append((a, b))    # ์‹œ์ž‘์ 
                visited[a][b] = True
                # BFS ์‹œ์ž‘
                while queue:
                    x, y = queue.popleft()
                    for c in range(4):
                        nx = x + mx[c]
                        ny = y + my[c]
                        # ๋ฒ”์œ„ ์•ˆ์— ์žˆ๊ณ 
                        if 1 <= nx < n-1 and 1 <= ny < m-1:
                            # ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋Š” ๋น™์‚ฐ์„ ์ฐพ์œผ๋ฉด ๋ฉ์–ด๋ฆฌ์— ํฌํ•จ
                            if world[nx][ny] > 0 and not visited[nx][ny]:
                                queue.append((nx, ny))
                                visited[nx][ny] = True
                                
    return groups


n, m = map(int, stdin.readline().rstrip().split())
world = [list(map(int, stdin.readline().rstrip().split())) for _ in range(n)]
# ์ƒ ํ•˜ ์ขŒ ์šฐ
mx = [-1, 1, 0, 0]
my = [0, 0, -1, 1]
year = 0    # ์‹œ๊ฐ„
groups = 0    # ๋ฉ์–ด๋ฆฌ ๊ฐœ์ˆ˜
ice_exist = False    # ๋น™์‚ฐ์ด ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌ

# ๋น™์‚ฐ์ด ๋‘ ๋ฉ์–ด๋ฆฌ ์ด์ƒ์ด ๋˜๋ฉด ์ข…๋ฃŒ
while groups < 2:
    ice_exist = False
    cp_world = copy.deepcopy(world)
    # ๋น™์‚ฐ์„ ๋…น์ธ๋‹ค.(ํ…Œ๋‘๋ฆฌ๋Š” ํ•ญ์ƒ ๋ฌผ์ด๋‹ค.)
    for i in range(1, n-1):
        for j in range(1, m-1):
            # ๋น™์‚ฐ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด
            if world[i][j] > 0:
                ice_exist = True
                # ๋ฐ”๋‹ท๋ฌผ๊ณผ ์ ‘ํ•œ ๋ถ€๋ถ„์˜ ์ˆ˜๋งŒํผ ๋…น๋Š”๋‹ค.
                melt = oceans(i, j)
                if world[i][j] <= melt:
                    world[i][j] = 0
                else:
                    world[i][j] -= melt
    # ๋น™์‚ฐ์ด ์—†์—ˆ์œผ๋ฉด ๋ฐ”๋กœ ์ข…๋ฃŒ
    if not ice_exist:
        break
    # 1๋…„์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    year += 1
    # ๋น™์‚ฐ์„ ๋…น์ธ ํ›„ ๋ฉ์–ด๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ณธ๋‹ค.
    groups = bfs()
                
# ๋‹ค ๋…น์ผ ๋•Œ๊นŒ์ง€ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค. 
if not ice_exist and groups < 2:
    print(0)
else:
    print(year)
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Problem_Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] ๋ฐฑ์ค€ 1920 ์ˆ˜ ์ฐพ๊ธฐ / ์ด๋ถ„ํƒ์ƒ‰  (0) 2021.02.09
[BOJ] ๋ฐฑ์ค€ 9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ / BFS  (0) 2021.02.08
[BOJ] ๋ฐฑ์ค€ 2468 ์•ˆ์ „ ์˜์—ญ / BFS  (0) 2021.01.13
[BOJ] ๋ฐฑ์ค€ 5014 ์Šคํƒ€ํŠธ๋งํฌ / BFS  (0) 2021.01.13
[BOJ] ๋ฐฑ์ค€ 13549 ์ˆจ๋ฐ”๊ผญ์งˆ 3 / BFS  (0) 2021.01.12
    'Problem_Solving' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [BOJ] ๋ฐฑ์ค€ 1920 ์ˆ˜ ์ฐพ๊ธฐ / ์ด๋ถ„ํƒ์ƒ‰
    • [BOJ] ๋ฐฑ์ค€ 9205 ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ / BFS
    • [BOJ] ๋ฐฑ์ค€ 2468 ์•ˆ์ „ ์˜์—ญ / BFS
    • [BOJ] ๋ฐฑ์ค€ 5014 ์Šคํƒ€ํŠธ๋งํฌ / BFS
    glowing713
    glowing713

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”