[๋ฐฑ์ค€] 14502. ์—ฐ๊ตฌ์†Œ/Python - Gold4

2025. 8. 3. 17:39ยทCoding Test/Algorithms

โ“๋ฌธ์ œ

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

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 116952 KB, ์‹œ๊ฐ„: 1284 ms

๋ถ„๋ฅ˜

๊ตฌํ˜„, ๊ทธ๋ž˜ํ”„ ์ด๋ก , ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, ๊ฒฉ์ž ๊ทธ๋ž˜ํ”„

 

๋ฌธ์ œ ์„ค๋ช…

์ธ์ฒด์— ์น˜๋ช…์ ์ธ ๋ฐ”์ด๋Ÿฌ์Šค๋ฅผ ์—ฐ๊ตฌํ•˜๋˜ ์—ฐ๊ตฌ์†Œ์—์„œ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์œ ์ถœ๋˜์—ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ์•„์ง ํผ์ง€์ง€ ์•Š์•˜๊ณ , ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ™•์‚ฐ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์—ฐ๊ตฌ์†Œ์— ๋ฒฝ์„ ์„ธ์šฐ๋ ค๊ณ  ํ•œ๋‹ค.

์—ฐ๊ตฌ์†Œ๋Š” ํฌ๊ธฐ๊ฐ€ N×M์ธ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง์‚ฌ๊ฐํ˜•์€ 1×1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ์—ฐ๊ตฌ์†Œ๋Š” ๋นˆ ์นธ, ๋ฒฝ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ฒฝ์€ ์นธ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋“ ์ฐจ์ง€ํ•œ๋‹ค.

์ผ๋ถ€ ์นธ์€ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ด ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ๋นˆ ์นธ์œผ๋กœ ๋ชจ๋‘ ํผ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ƒˆ๋กœ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฒฝ์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ์ด๋ฉฐ, ๊ผญ 3๊ฐœ๋ฅผ ์„ธ์›Œ์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ๊ตฌ์†Œ๊ฐ€ ์ƒ๊ธด ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

์ด๋•Œ, 0์€ ๋นˆ ์นธ, 1์€ ๋ฒฝ, 2๋Š” ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์žˆ๋Š” ๊ณณ์ด๋‹ค. ์•„๋ฌด๋Ÿฐ ๋ฒฝ์„ ์„ธ์šฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ฐ”์ด๋Ÿฌ์Šค๋Š” ๋ชจ๋“  ๋นˆ ์นธ์œผ๋กœ ํผ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

2ํ–‰ 1์—ด, 1ํ–‰ 2์—ด, 4ํ–‰ 6์—ด์— ๋ฒฝ์„ ์„ธ์šด๋‹ค๋ฉด ์ง€๋„์˜ ๋ชจ์–‘์€ ์•„๋ž˜์™€ ๊ฐ™์•„์ง€๊ฒŒ ๋œ๋‹ค.

2 1 0 0 1 1 0
1 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 1 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์ง„ ๋’ค์˜ ๋ชจ์Šต์€ ์•„๋ž˜์™€ ๊ฐ™์•„์ง„๋‹ค.

2 1 0 0 1 1 2
1 0 1 0 1 2 2
0 1 1 0 1 2 2
0 1 0 0 0 1 2
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0

๋ฒฝ์„ 3๊ฐœ ์„ธ์šด ๋’ค, ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์งˆ ์ˆ˜ ์—†๋Š” ๊ณณ์„ ์•ˆ์ „ ์˜์—ญ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์œ„์˜ ์ง€๋„์—์„œ ์•ˆ์ „ ์˜์—ญ์˜ ํฌ๊ธฐ๋Š” 27์ด๋‹ค.

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

โœ๐Ÿปํ’€์ด

์šฐ์„  ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ด์šฉํ•ด ๋ฒฝ์„ ์„ธ์šธ ๋นˆ ์นธ์„ ์ฐพ๋Š”๋‹ค.

๋ฒฝ์„ ์„ธ ๊ณณ์— ์„ธ์šฐ๊ณ  ๋‚˜๋ฉด ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ BFS๋กœ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์ง€๋Š” ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฒฝ๊ณผ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์ง„ ๊ณณ์„ ์ œ์™ธํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณ„์‚ฐํ•œ ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ๋„“์€ ์•ˆ์ „์ง€๋Œ€ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’ป์ฝ”๋“œ

๋‚ด ํ’€์ด

import sys
from collections import deque

input = sys.stdin.readline
N, M = map(int, input().split())  # N = ์„ธ๋กœ, M = ๊ฐ€๋กœ
labs = [list(map(int, input().split())) for _ in range(N)]


def bfs():
    q = deque()
    visited = [[1 if labs[y][x] == 1 else 0 for x in range(M)] for y in range(N)]  # ๋ฒฝ์€ 1๋กœ ํ‘œ์‹œ.
    for y in range(N):
        for x in range(M):
            if labs[y][x] == 2:
                q.append((y, x))
                visited[y][x] = 1  # ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์žˆ๋Š” ์œ„์น˜์— 1 ํ‘œ์‹œ

    while q:
        y, x = q.popleft()

        for dy, dx in ((-1, 0), (1, 0), (0, -1), (0, 1)):  # ์ƒํ•˜์ขŒ์šฐ
            ny, nx = y + dy, x + dx
            if 0 <= ny < N and 0 <= nx < M:
                if visited[ny][nx] == 0 and labs[ny][nx] == 0:
                    visited[ny][nx] = 1  # ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์กŒ์œผ๋ฏ€๋กœ 1 ํ‘œ์‹œ
                    q.append((ny, nx))

    res = 0
    for i in range(N):
        res += visited[i].count(0)  # ๋ฒฝ๊ณผ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ํผ์ง„ ๊ณณ์„ ์ œ์™ธํ•˜๊ณ  ์•ˆ์ „์ง€๋Œ€ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

    return res


def backtraking(w):
    global ans
    if w == 3:  # ๋ฒฝ์„ ์„ธ ๊ฐœ ์„ธ์šด ํ›„ ์•ˆ์ „ ์ง€๋Œ€ ๋„“์ด ํ™•์ธ
        ans = max(bfs(), ans)
        return

    for y in range(N):
        for x in range(M):
            if labs[y][x] == 0:
                labs[y][x] = 1
                backtraking(w + 1)
                labs[y][x] = 0


ans = 0
backtraking(0)
print(ans)

๋‹ค๋ฅธ ํ’€์ด

https://www.youtube.com/watch?v=1Ab5s8HV1ww ์ฐธ๊ณ 

import sys
from collections import deque

input = sys.stdin.readline
N, M = map(int, input().split()) # N = ์„ธ๋กœ, M = ๊ฐ€๋กœ
labs = [list(map(int, input().split())) for _ in range(N)]

def bfs(walls):
    # ์„ ํƒํ•œ ์œ„์น˜์— ๋ฒฝ ์„ธ์šฐ๊ธฐ
    for y, x in walls:
        labs[y][x] = 1

    q = deque(virus)
    res = CNT - 3  # ๋ฒฝ ์„ธ์šด ๊ฐœ์ˆ˜๋ฅผ ๋นผ๊ณ  ๋‚จ์€ ๋นˆ ์นธ
    visit = [[1 if (y, x) in virus else 0 for x in range(M)] for y in range(N)]

    while q:
        y, x = q.popleft()

        for dy, dx in ((-1, 0), (1, 0), (0, -1), (0, 1)):
            ny, nx = y + dy, x + dx
            if 0 <= ny < N and 0 <= nx < M and visit[ny][nx] == 0 and labs[ny][nx] == 0:
                q.append((ny, nx))
                visit[ny][nx] = 1
                res -= 1

    for y, x in walls:
        labs[y][x] = 0

    return res


ans = 0
empty = []
virus = []

# ๋น„์–ด์žˆ๋Š” ๊ณณ๊ณผ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์žˆ๋Š” ๊ณณ ํƒ์ƒ‰
for y in range(N):
    for x in range(M):
        if labs[y][x] == 0:
            empty.append((y, x))
        elif labs[y][x] == 2:
            virus.append((y, x))

# ๋น„์–ด์žˆ๋Š” ๊ณณ ์ค‘ ํ•œ ๊ณณ์„ ๋ฒฝ์„ ์„ธ์šธ ์„ธ ๊ณณ ์„ ํƒ
CNT = len(empty)
for i in range(CNT-2):
    for j in range(i+1, CNT-1):
        for k in range(j+1, CNT):
            ans = max(bfs([empty[i], empty[j], empty[k]]), ans)

print(ans)

๐Ÿ“ํ›„๊ธฐ

์ฒ˜์Œ ํ’€์—ˆ์„ ๋•Œ Backtracking๊ณผ BFS๋กœ ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์ฒ˜์ฐธํ•ด์„œ ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ฐพ์•„๋ณด์•˜๋‹ค. ์‹œ๊ฐ„์ด 4๋ฐฐ ์ด์ƒ ์ฐจ์ด๋‚˜๋Š” ๊ฑธ ๋ณด๋‹ˆ ์ง„์งœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ƒˆ์‚ผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ฒด๊ฐํ–ˆ๋‹ค..

๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ ํ’€์—ˆ๋˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์„œ ๊ทธ ์ „๋ณด๋‹ค๋Š” ์ค„์—ˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์ฒ˜์ฐธํ•˜๋‹ค. ์ฒ˜์Œ ํ’€์ด์—๋Š” deepcopy๋กœ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ–ˆ๋Š”๋ฐ ์•„๋งˆ ์ด๊ฒŒ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ด์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

'Coding Test > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 11404. ํ”Œ๋กœ์ด๋“œ/Python - Gold4  (0) 2025.08.07
[๋ฐฑ์ค€] 14500. ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ/Python - Gold4  (2) 2025.08.06
[๋ฐฑ์ค€] 14499. ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ/Python - Gold4  (4) 2025.08.02
[๋ฐฑ์ค€] 3190. ๋ฑ€/Python - Gold4  (3) 2025.07.30
[๋ฐฑ์ค€] 14503. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ/Python - Gold5  (1) 2025.07.29
'Coding Test/Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 11404. ํ”Œ๋กœ์ด๋“œ/Python - Gold4
  • [๋ฐฑ์ค€] 14500. ํ…ŒํŠธ๋กœ๋ฏธ๋…ธ/Python - Gold4
  • [๋ฐฑ์ค€] 14499. ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ/Python - Gold4
  • [๋ฐฑ์ค€] 3190. ๋ฑ€/Python - Gold4
The Engineer, Lucy
The Engineer, Lucy
  • The Engineer, Lucy
    Growing up for My Future๐Ÿ’•
    The Engineer, Lucy
    • Instagram
    • GitHub
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (171) N
      • Linux (26)
      • Infra (9)
      • Cloud (25)
        • AWS (2)
        • GCP (3)
        • Docker (4)
        • Kubernetes (14)
        • IaC (2)
      • NGINX (1)
      • DevOps (3)
      • Computer Science (17)
        • Data Structure (0)
        • Algorithms (1)
        • Operating System (3)
        • Network (11)
        • Database System (2)
      • Coding Test (85) N
        • Algorithms (77) N
        • SQL (7)
      • ETC (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๊ณต์ง€์‚ฌํ•ญ

  • ๋งํฌ

    • Lucy's Instagram
    • Lucy's GitHub
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    network
    ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค
    ์‰˜ ์Šคํฌ๋ฆฝํŠธ
    ๋„์ปค
    ๋ฆฌ๋ˆ…์Šค
    ๋ฐฑ์ค€
    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    programmers
    Java
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰
    docker
    ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰
    bfs
    cs ๊ธฐ์ดˆ ์ง€์‹ ์ •๋ฆฌ
    ์˜ค๋ธ”์™„
    Shell
    K8s
    Shell Script
    ์…ธ ์Šคํฌ๋ฆฝํŠธ
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณต๋ถ€
    ์ž๋ฐ”
    ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ
    Baekjoon
    ๋„คํŠธ์›Œํฌ
    Kubernetes
    Linux
    ๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ ์ง€์‹
    dfs
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
The Engineer, Lucy
[๋ฐฑ์ค€] 14502. ์—ฐ๊ตฌ์†Œ/Python - Gold4
์ƒ๋‹จ์œผ๋กœ

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