1. ๋ฌธ์ ์ค๋ช
- ์
๋ ฅ
- ์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 โค N, M โค 8)
- ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ๋ชจ์์ด ์ฃผ์ด์ง๋ค. 0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น์ด๋ค. 2์ ๊ฐ์๋ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.๋น ์นธ์ ๊ฐ์๋ 3๊ฐ ์ด์์ด๋ค.
- ์ถ๋ ฅ : ์ฒซ์งธ ์ค์ ์ป์ ์ ์๋ ์์ ์์ญ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
2. ์ฝ๋
solution1.py
# -*- coding: utf-8 -*-
n, m = map(int, input().split())
data = [] # ์ด๊ธฐ ๋งต ๋ฆฌ์คํธ
temp = [[0] * m for _ in range(n)] # ๋ฒฝ์ ์ค์นํ ๋ค์ ๋งต ๋ฆฌ์คํธ
for _ in range(n):
data.append(list(map(int, input().split())))
# 4๊ฐ์ง ์ด๋ ๋ฐฉํฅ์ ๋ํ ๋ฆฌ์คํธ
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
result = 0
# ๊น์ด ์ฐ์ ํ์(DFS)์ ์ด์ฉํด ๊ฐ ๋ฐ์ด๋ฌ์ค๊ฐ ์ฌ๋ฐฉ์ผ๋ก ํผ์ง๋๋ก ํ๊ธฐ
def virus(x, y):
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ์, ํ, ์ข, ์ฐ ์ค์์ ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋ ๊ฒฝ์ฐ
if nx >= 0 and nx < n and ny >= 0 and ny < m:
if temp[nx][ny] == 0:
# ํด๋น ์์น์ ๋ฐ์ด๋ฌ์ค ๋ฐฐ์นํ๊ณ , ๋ค์ ์ฌ๊ท์ ์ผ๋ก ์ํ
temp[nx][ny] = 2
virus(nx, ny)
# ํ์ฌ ๋งต์์ ์์ ์์ญ์ ํฌ๊ธฐ ๊ณ์ฐํ๋ ๋ฉ์๋
def get_score():
score = 0
for i in range(n):
for j in range(m):
if temp[i][j] == 0:
score += 1
return score
# ๊น์ด ์ฐ์ ํ์(DFS)์ ์ด์ฉํด ์ธํ๋ฆฌ๋ฅผ ์ค์นํ๋ฉด์, ๋งค ๋ฒ ์์ ์์ญ์ ํฌ๊ธฐ ๊ณ์ฐ
def dfs(count):
global result
# 2. ์ธํ๋ฆฌ๊ฐ 3๊ฐ ์ค์น๋ ๊ฒฝ์ฐ ๋ฐ์ด๋ฌ์ค ์ ํ
if count == 3:
for i in range(n):
for j in range(m):
temp[i][j] = data[i][j]
# ๊ฐ ๋ฐ์ด๋ฌ์ค์ ์์น์์ ์ ํ ์งํ
for i in range(n):
for j in range(m):
if temp[i][j] == 2:
virus(i, j)
# 3. ์์ ์์ญ์ ์ต๋๊ฐ ๊ณ์ฐ
result = max(result, get_score())
return
# 1. ๋น ๊ณต๊ฐ์ ์ธํ๋ฆฌ๋ฅผ ์ค์น
for i in range(n):
for j in range(m):
if data[i][j] == 0:
data[i][j] = 1
count += 1
dfs(count)
data[i][j] = 0
count -= 1
dfs(0)
print(result)
3. ํ๊ณ
- ์์ง ์ด ๋ฌธ์ ๋ฅผ ํผ์์ ํ๊ธฐ์๋ ์ด๋ ค์์ ์ด์ฝํ ์ฑ ํ์ด๋ฅผ ๋ณด๊ณ ์ต๋ํ ์ดํดํ ํ ์ธ์๋ฒ๋ ธ๋ค.
- ์ ์ฒด์ ์ธ ์ฝ๋์ ํ์ด ๋ฐฉํฅ์ ์ธ ๊ฐ์ง๋ก ์์ฝํ ์ ์๋ค.
- ๋น๊ณต๊ฐ์ ์ธํ๋ฆฌ ์ค์น
- for ๋ฌธ์ผ๋ก data(์ด๊ธฐ ๋งต ๋ฆฌ์คํธ)๋ฅผ ๋๋ฉด์ 0์ด ๋์ค๋ ์๊ฐ 1๋ก ๋์ฒดํ๋ค.
- 0์ธ ๋ชจ๋ ๋ถ๋ถ ์ค ์ธ ๊ณณ๋ฅผ ์ ํํด์ 1์ ๋ฃ์ ๋, ๋์ฌ ์ ์๋ ๋ชจ๋ ์กฐํฉ์ ํ์ํด์ผํ๋ค.(์์ ํ์!)
- ๊ทธ๋์ count ๋ณ์๋ฅผ dfs๋ฅผ ์ฌ๊ทํธ์ถ ํ ๋, ๋ฃ์ด์ฃผ์ด count==3์ด ๋ ๋ ๊ณผ์ 2๋ฅผ ์ํํ๋๋ก ํ๋ค.
- dfs()๋ฅผ ๋ง์น ํ์ ์์๋ณต๊ทํ๋ ์ด์ ๋ data์ count์ ์ด๊ธฐ ์ํ๋ฅผ ๊ณ์ ํ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ธํ๋ฆฌ๊ฐ 3๊ฐ ์ค์น๋ ๊ฒฝ์ฐ ๋ฐ์ด๋ฌ์ค ์ ํ: ์ํ์ข์ฐ
- ์ธํ๋ฆฌ ์ธ ๊ฐ๊ฐ ์ค์น๋ ์์ ์ ์กฐ๊ฑด๋ฌธ์ ๋ฃ์ด์ temp์ ์ธํ๋ฆฌ๋ฅผ ๋ฃ์ ์ํ(์ธ ๊ฐ์ 1์ ๋ฃ์ ์ํ)์ data๋ฅผ ๋ณต๋ถ(?)ํด์ค๋ค.
- ์ด๊ธฐ์ํ๋ฅผ ๊ณ์ ์จ์ ๋ค๋ฅธ ์กฐํฉ์ ๋งค๋ฒ ์ฐพ์์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํด์ค ๊ฒ ๊ฐ๋ค.
- temp๋ก ์ ๋ณด๋ฅผ ๋ชจ๋ ์ฎ๊ธด ๋ค์๋ ๋ฐ์ด๋ฌ์ค์ ์์น(2๊ฐ ์๋ ์์น)์์ ๊ทผ์ฒ์ 0์ด ์์ ๋, ์ ํ๋ฅผ ์งํํด์ผํ๋ค. ์ด๊ฑด virusํจ์์์ ์ํ๋๋ค.
- virus() ํจ์์๋ temp์์ 2๊ฐ ๋ฐ๊ฒฌ๋ ์๊ฐ์ x,y ์ขํ๋ฅผ ์ ๋ฌํด์ค๋ค.
- ํด๋น ์ขํ๋ฅผ ์ํ์ข์ฐ๋ฅผ ํ์ํ์ฌ 0์ ๋ฐ๊ฒฌํ๋ฉด 2๋ก ๋ณ๊ฒฝํ๋ ์์ ์ ์ฌ๊ท์ ์ผ๋ก ์ํํ๋ค.
- ์์ ์์ญ์ ์ต๋๊ฐ ๊ณ์ฐ: 0์ ๊ฐ์
- ์ ํ๊ฐ ๊ฐ๋ฅํ ๊ณณ์ ๋ชจ๋ 2๋ก ๋ง๋ ํ์๋ ๋จ์์๋ 0์ ๊ฐ์๋ฅผ ์ธ์ ์์ ์์ญ์ ๊ณ์ฐํด์ผํ๋ค.
- getscore()๋ ํ์ฌ temp์ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก 0์ ๊ฐ์๋ฅผ ์ธ์ ๋ฐํํ๋ค.
- ๋ฐํ๋ ๊ฒฐ๊ณผ๋ ๋ค๋ฅธ ์กฐํฉ์์์ score๊ฐ ์ ์ฅ๋์ด ์์ result์ ๋น๊ตํ์ฌ ์ต๋๊ฐ์ result์ ์ ์ฅํ ์ ์๋๋ก ํ๋ค.
- ๊ทธ๋์ผ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ์ฌ ์์ ์์ญ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
- return์ ํด์ค ์ด์ ๋ ์ธํ๋ฆฌ๋ฅผ ์ธ ๊ฐ ์ค์นํ์ ๋๊น์ง๋ง if๋ฌธ์ ์คํํ๊ณ , ๊ทธ ์ด์์ ๊ฒฝ์ฐ๋ ํ์ํ์ง ์๊ธฐ ์ํด์์ด๋ค.
4. ์ฐธ๊ณ
https://github.com/ndb796/python-for-coding-test/blob/master/13/2.py
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] #2110 ๊ณต์ ๊ธฐ ์ค์น (Python) (0) | 2022.01.29 |
---|---|
[๋ฐฑ์ค] #2805 ๋๋ฌด ์๋ฅด๊ธฐ (Python) (0) | 2022.01.26 |
[๋ฐฑ์ค] #1260 DFS์ BFS (Python) (0) | 2022.01.19 |
[๋ฐฑ์ค] #18405 ๊ฒฝ์์ ์ ์ผ (Python) (0) | 2022.01.18 |
[๋ฐฑ์ค] #18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (Python) (0) | 2022.01.18 |