ํฐ์คํ ๋ฆฌ ๋ทฐ
[๋ฐฑ์ค] 20057. ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ / python ํ์ด์ฌ
jen jen 2021. 7. 5. 01:06๐ฉ ์๋ฎฌ๋ ์ด์ , ๊ตฌํ
* ์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์
thinking
1. ํ ๋ค์ด๋ ํ์ ๋ฐฉํฅ (y์ ์์น)
2. ๋ฐฉํฅ๋ณ ๋ชจ๋ ๋น์จ ์์น
3. a๊ฐ๊ณผ ๊ฒฉ์ ๋ฐ์ ๋ชจ๋์ ์
์ด๋ ๊ฒ 3๊ฐ์ง๊ฐ ๋ฌธ์ ํ์ด์ ๊ด๊ฑด์ด์๋ค. ๊ตฌํ ๋ฌธ์ ๋ ๋ง๊ทธ๋๋ก ๋ฌธ์ ์์ ํ๋ผ๋๋๋ก ํ๋ฉด ๋๋๋ฐ ํ ๋ค์ด๋ ๊ตฌํ์ด ์ด๋ ค์ ๋ค.
1. ํ ๋ค์ด๋ ํ์ ๋ฐฉํฅ (y์ ์์น)
ํ ๋ค์ด๋ ๋๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๋ก ๊ตฌํด๋ดค๋ค.
N = 5์ธ ๊ฒฝ์ฐ, ์์ ๊ทธ๋ฆผ์ด๋ ๋งจ ์ ๋ฌธ์ ์ ์ฃผํฉ์์ผ๋ก ํ์ํ ๊ฒ ์ฒ๋ผ ์ด 24๋ฒ ์์ง์ธ๋ค.
(์ผ์ชฝ ์ค๋ฅธ์ชฝ ์ ์๋ = 0 1 2 3)
โพ ๋ฐฉ๋ฒ 1 - ๋ชซ๊ณผ ๋๋จธ์ง๋ก ๊ตฌํ๊ธฐ (๊ฒ์ ์)
→↑(2 3)์ด ←↓(0 1)์ ๋นํด ํ๋ฒ์ฉ ๋ ์์ง์ด๊ณ , ํ๋ฐํด ๋ค ๋๋ฉด ์ด์ ๋ณด๋ค ํ๋ฒ ๋ ์์ง์ด๋ฏ๋ก
๋ชซ์ ํ์ฐจ, ๋๋จธ์ง๋ฅผ dxdy direction (d) ๋ฐฉํฅ์ผ๋ก ์ค์ ํ ํ, d=0 ๋๋ 2์ด๋ฉด ํ๋ฒ ๋ ์คํ
โพ ๋ฐฉ๋ฒ 2 - [←↓][→↑] ๋ฐฉํฅ ๋๊ฐ์ฉ ๋ฌถ์ด์ ๊ตฌํ๊ธฐ (ํ๋ญ์ด)
๊ทธ๋ฆผ์์ ํ๋์์ผ๋ก ๋ฌถ์๊ฒ ์ฒ๋ผ ์ผ์๋/์ค์ ๋ฅผ ์ธํธ๋ก ๋ฌถ์ด์ ํจ์ ์คํ
๋ง์ง๋ง ํ์ฐจ์์ ์ซ์๊ฐ ๋ถ์กฑํ๊ฑด ์ ๊ฒฝ ์์จ๋ ๋๋ค. ์ด์ฐจํผ ์ธ๋ฑ์ค ๋ฐ์ผ๋ก ๋๊ฐ๋ฉด ์ข ๋ฃํ๋๋ก ์ฝ๋๋ฅผ ์ง๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
2. ๋ฐฉํฅ๋ณ ๋ชจ๋ ๋น์จ ์์น
๋ฐฉํฅ๋ณ ๋ชจ๋ ๋น์จ์ ์ขํ๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฐฉํฅ๋ณ๋ก ๊ท์น์ ์ฐพ์ ํํํํ๋ก ๋ฌถ์๋ค.
a ๋ ๋น์จ์ด ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋น์จ์ ๋ค๊ณผ ๊ตฌ๋ถ์ง๊ธฐ ์ํด 0์ด๋ผ๊ณ ๋๊ณ , for๋ฌธ์ ๋๋ฉด์ ๋งจ ๋ง์ง๋ง์ผ๋ก ๊ฐ์ ๊ตฌํ๊ธฐ์ํด ๋ฆฌ์คํธ์ ๋งจ ๋ง์ง๋ง์ ๋์๋ค.
์ฝ๋
โพ ํ ๋ค์ด๋ ๋๋ ๋ฐฉ๋ฒ 1 - ๋ชซ๊ณผ ๋๋จธ์ง๋ก ๊ตฌํ๊ธฐ
# ๋ชจ๋ ๊ณ์ฐํ๋ ํจ์
def recount(s_x, s_y, direction):
global ans
if s_y < 0:
return
# 3. a, out_sand
total = 0 # a ๊ตฌํ๊ธฐ ์ํ ๋ณ์
for dx, dy, z in direction:
nx = s_x + dx
ny = s_y + dy
if z == 0: # a(๋๋จธ์ง)
new_sand = sand[s_x][s_y] - total
else: # ๋น์จ
new_sand = int(sand[s_x][s_y] * z)
total += new_sand
if 0 <= nx < N and 0 <= ny < N: # ์ธ๋ฑ์ค ๋ฒ์์ด๋ฉด ๊ฐ ๊ฐฑ์
sand[nx][ny] += new_sand
else: # ๋ฒ์ ๋ฐ์ด๋ฉด ans ์นด์ดํธ
ans += new_sand
N = int(input())
sand = [list(map(int, input().split())) for _ in range(N)]
# 2. ๋ฐฉํฅ๋ณ ๋ชจ๋ ๋น์จ ์์น
left = [(1, 1, 0.01), (-1, 1, 0.01), (1, 0, 0.07), (-1, 0, 0.07), (1, -1, 0.1),
(-1, -1, 0.1), (2, 0, 0.02), (-2, 0, 0.02), (0, -2, 0.05), (0, -1, 0)]
right = [(x, -y, z) for x,y,z in left]
down = [(-y, x, z) for x,y,z in left]
up = [(y, x, z) for x,y,z in left]
s_x, s_y = N//2, N//2
ans = 0
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
# 1.ํ ๋ค์ด๋ ํ์ ๋ฐฉํฅ(y์์น)
dict = {0: left, 1: down, 2: right, 3: up}
time = 0
for i in range(2*N-1):
# ๋ชซ: i//4(ํ์+1), ๋๋จธ์ง:i%4(๋ฐฉํฅ)
d = i % 4
if d == 0 or d == 2: # ๋ค์ ํ์ฐจ(d==0) ์ด๊ฑฐ๋ right(d==2) ์ด๋ฉด ํ๋ฒ ๋
time += 1
for _ in range(time):
n_x = s_x + dx[d]
n_y = s_y + dy[d]
recount(n_x, n_y, dict[d]) # y์ขํ, ๋ฐฉํฅ
s_x, s_y = n_x, n_y
print(ans)
โพ ํ ๋ค์ด๋ ๋๋ ๋ฐฉ๋ฒ 2 - [←↓][→↑] ๋ ๋ฐฉํฅ์ฉ ๋ฌถ์ด์ ๊ตฌํ๊ธฐ
# ๋ชจ๋ ๊ณ์ฐํ๋ ํจ์
def recount(time, dx, dy, direction):
global ans, s_x, s_y
# y์ขํ ๊ณ์ฐ & x์ขํ ๊ฐฑ์
for _ in range(time):
s_x += dx
s_y += dy
if s_y < 0: # ๋ฒ์ ๋ฐ์ด๋ฉด stop
break
# 3. a, out_sand
total = 0 # a ๊ตฌํ๊ธฐ ์ํ ๋ณ์
for dx, dy, z in direction:
nx = s_x + dx
ny = s_y + dy
if z == 0: # a(๋๋จธ์ง)
new_sand = sand[s_x][s_y] - total
else: # ๋น์จ
new_sand = int(sand[s_x][s_y] * z)
total += new_sand
if 0 <= nx < N and 0 <= ny < N: # ์ธ๋ฑ์ค ๋ฒ์์ด๋ฉด ๊ฐ ๊ฐฑ์
sand[nx][ny] += new_sand
else: # ๋ฒ์ ๋ฐ์ด๋ฉด ans ์นด์ดํธ
ans += new_sand
N = int(input())
sand = [list(map(int, input().split())) for _ in range(N)]
# 2. ๋ฐฉํฅ๋ณ ๋ชจ๋ ๋น์จ ์์น
left = [(1, 1, 0.01), (-1, 1, 0.01), (1, 0, 0.07), (-1, 0, 0.07), (1, -1, 0.1),
(-1, -1, 0.1), (2, 0, 0.02), (-2, 0, 0.02), (0, -2, 0.05), (0, -1, 0)]
right = [(x, -y, z) for x, y, z in left]
down = [(-y, x, z) for x, y, z in left]
up = [(y, x, z) for x, y, z in left]
s_x, s_y = N//2, N//2 # ์์์ขํ(x์ขํ)
ans = 0 # out_sand
# 1.ํ ๋ค์ด๋ ํ์ ๋ฐฉํฅ(y์์น)
for i in range(1, N + 1):
if i % 2:
recount(i, 0, -1, left)
recount(i, 1, 0, down)
else:
recount(i, 0, 1, right)
recount(i, -1, 0, up)
print(ans)
'algorithm > baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17406. ๋ฐฐ์ด๋๋ฆฌ๊ธฐ4 / python ํ์ด์ฌ (0) | 2021.07.29 |
---|---|
[๋ฐฑ์ค] 21609. ์์ด ์คํ๊ต / python ํ์ด์ฌ (1) | 2021.07.11 |
[๋ฐฑ์ค] 2579. ๊ณ๋จ์ค๋ฅด๊ธฐ / python ํ์ด์ฌ (0) | 2021.06.30 |
[๋ฐฑ์ค] 2003. ์๋ค์ ํฉ 2 / python ํ์ด์ฌ / ํฌํฌ์ธํฐ, ๊ตฌ๊ฐํฉ (0) | 2021.06.30 |
[๋ฐฑ์ค] 1927. ์ต์ํ / 11279. ์ต๋ํ / python ํ์ด์ฌ (0) | 2021.06.06 |
- merge ์๋ฌ
- git ๋ฏธ๋ฌ๋ง
- ์ผ์ฑ์ฝํ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ธฐ์ง๊ตญ์ค์น
- Python
- 2018 ์นด์นด์ค ๊ณต์ฑ
- 17406 ๋ฐฐ์ด๋๋ฆฌ๊ธฐ4
- dp
- ์์ด๋๋ง์๊ธฐ
- merge์๋ฌ
- 20056 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ
- BFS
- swea
- ๋ณด์์ผํ
- dfs
- ์๊ณ ๋ฆฌ์ฆ
- react
- ํ์ด์ฌ
- ๋ฐฑ์ค
- ์ผ์ฑ๊ธฐ์ถ
- 20057 ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋
- 2579 ๊ณ๋จ์ค๋ฅด๊ธฐ
- 21609 ์์ด ์คํ๊ต
- ๋ธ๋ฃจํธํฌ์ค
- Total
- Today
- Yesterday