https://www.acmicpc.net/problem/14503
ํ์ด ๊ณผ์
๋ก๋ด ์ฒญ์๊ธฐ ์๋๋ฐฉ์์ ๋ณด๊ณ ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํผ๋ค.
def clean(x,y,d,count):
if area[x][y] == 0:
area[x][y] = 2
ํจ์๋ x,y ์ขํ , ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅd, ๊ทธ๋ฆฌ๊ณ 2a๋จ๊ณ๊ฐ ์คํ๋๋ ํ์ count๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ๋ค.
ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋งจ ์ฒ์ ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ๋น๊ณต๊ฐ์ ์์๋ ์ฒญ์๋ฅผ ์์ผ์ค๋ค. ์ด๋ ์ฒญ์ํ๋ค๋ ๊ฒ์
ํํํ๊ธฐ ์ํด ๋น๊ณต๊ฐ(0)๊ณผ ๋ฒฝ(1)๊ณผ ๋ค๋ฅธ ์ซ์์ธ 2๋ฅผ ์ ๋ ฅ ํด์ค๋ค.
if count <= 3:
if d == 0:
if area[x][y - 1] == 0:
#print("์์ชฝ์ผ๋ก ๊ฐ์ ์ฒญ์")
clean(x,y - 1,3,0)
else:
#print("์์ชฝ์ผ๋ก ๋๊ธฐ")
clean(x,y,3,count + 1)
elif d == 3:
if area[x + 1][y] == 0:
#print("๋จ์ชฝ์ผ๋ก ๊ฐ์ ์ฒญ์")
clean(x + 1,y,2,0)
else:
#print("๋จ์ชฝ์ผ๋ก ๋๊ธฐ")
clean(x,y,2,count + 1)
์ดํ ์ฝ๋ ์์ฑ์์๋ 2bํํธ๊ฐ ๋จผ์ ์ง๋ง ์ค๋ช ์ ์ํด 2aํํธ๋ฅผ ๋จผ์ ํ์ดํ๋ค.
๋จผ์ ํ์ ํ์(count)๊ฐ 3๋ฒ ์ดํ์ด๋ฉด ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ(d)์ ๋ฐ๋ผ if๋ฌธ์ ์คํ์์ผ์ฃผ๋ฉด ๋๋ค.
์ผ์ชฝ ๊ณต๊ฐ์ด ๋น์ฌ์๋ค๋ฉด ํด๋น ๋ฐฉํฅ์ผ๋ก ๊ฐ์ ์ฒญ์ํ๊ณ ์๋๋ผ๋ฉด ๋ฐฉํฅ์ผ๋ก ๋๊ธฐ๋งํ๊ณ count๊ฐ๋ง 1 ์ฆ๊ฐ์์ผ์ค๋ค
if count == 4:
#print("4๋ฒ ์คํ")
if d == 0:
if area[x + 1][y] == 1:
#print("์ข
๋ฃ")
return
else:
clean(x + 1,y,0,0)
์ดํ ํ์ ํ์(count)๊ฐ 4๊ฐ ๋๋ฉด 2bํํธ๋ฅผ ์คํํ๋ค.
๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๋ค์ชฝ์ด ๋ฒฝ(1)์ด๋ผ๋ฉด ๋ก๋ด ์ฒญ์๊ธฐ ์๋์ ๋ฉ์ถ๊ณ (ํจ์์ข ๋ฃ), ์๋๋ผ๋ฉด ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ๊ณ ๋ค๋ก๊ฐ๋ค.
์ด๋ ํ์ ํ์(count)๋ 0์ผ๋ก ์ด๊ธฐํ ์์ผ์ค๋ค.
result = 0
for i in range(N):
for j in range(M):
if area[i][j] == 2:
result += 1
print(result)
์ดํ ์ด์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ์ด 2์ธ๊ฒ์ ์นด์ดํธํด์ ์ถ๋ ฅํด์ค๋ค.
ํ์ด์ฌ์ผ๋ก ์์ฑํ ์ ์ฒด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. sys๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ท๊น์ด๋ฅผ ์ฆ๊ฐ์์ผฐ๋ค.
import sys
sys.setrecursionlimit(10**6)
N, M = map(int,input().split())
r,c,di = map(int,input().split())
# 0 ๋ถ, 1 ๋, 2 ๋จ, 3์
area = []
for _ in range(N):
area.append([int(x) for x in input().split()])
def clean(x,y,d,count):
if area[x][y] == 0:
area[x][y] = 2
if count == 4:
#print("4๋ฒ ์คํ")
if d == 0:
if area[x + 1][y] == 1:
#print("์ข
๋ฃ")
return
else:
clean(x + 1,y,0,0)
elif d == 3:
if area[x][y + 1] == 1:
#print("์ข
๋ฃ")
return
else:
clean(x,y + 1,3,0)
elif d == 2:
if area[x - 1][y] == 1:
#print("์ข
๋ฃ")
return
else:
clean(x - 1,y,2,0)
elif d == 1:
if area[x][y - 1] == 1:
#print("์ข
๋ฃ")
return
else:
clean(x,y - 1,1,0)
if count <= 3:
if d == 0:
if area[x][y - 1] == 0:
#print("์์ชฝ์ผ๋ก ๊ฐ์ ์ฒญ์")
clean(x,y - 1,3,0)
else:
#print("์์ชฝ์ผ๋ก ๋๊ธฐ")
clean(x,y,3,count + 1)
elif d == 3:
if area[x + 1][y] == 0:
#print("๋จ์ชฝ์ผ๋ก ๊ฐ์ ์ฒญ์")
clean(x + 1,y,2,0)
else:
#print("๋จ์ชฝ์ผ๋ก ๋๊ธฐ")
clean(x,y,2,count + 1)
elif d == 2:
if area[x][y + 1] == 0:
#print("๋์ชฝ์ผ๋ก ๊ฐ์ ์ฒญ์")
clean(x,y + 1,1,0)
else:
#print("๋์ชฝ์ผ๋ก ๋๊ธฐ")
clean(x,y,1,count + 1)
elif d == 1:
if area[x - 1][y] == 0:
#print("๋ถ์ชฝ์ผ๋ก ๊ฐ์ ์ฒญ์")
clean(x - 1,y,0,0)
else:
#print("๋ถ์ชฝ์ผ๋ก ๋๊ธฐ")
clean(x,y,0,count + 1)
clean(r,c,di,0)
#print(area)
result = 0
for i in range(N):
for j in range(M):
if area[i][j] == 2:
result += 1
print(result)
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11718 ๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ (python ํ์ด์ฌ) (0) | 2022.06.10 |
---|---|
[๋ฐฑ์ค] 1005 ACMCraft (python ํ์ด์ฌ) (0) | 2022.06.10 |
[๋ฐฑ์ค] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ(python ํ์ด์ฌ) (0) | 2022.06.09 |
[๋ฐฑ์ค] 7576 ํ ๋งํ (python ํ์ด์ฌ) (0) | 2022.06.08 |
[๋ฐฑ์ค] 14502 _์ฐ๊ตฌ์ (python ํ์ด์ฌ) (0) | 2022.05.13 |