๋ฌธ์
https://www.acmicpc.net/problem/15685
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x0D๊ฐ - ์๋ฎฌ๋ ์ด์
์๊ณ ๋ฆฌ์ฆ: ์๋ฎฌ๋ ์ด์
ํ์ด
๋๋๊ณค ์ปค๋ธ๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์์ฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ด์ฐจ์ ์ขํ ํ๋ฉด ์์์ ์ ์๋๋ค. ์ขํ ํ๋ฉด์ x์ถ์ → ๋ฐฉํฅ, y์ถ์ ↓ ๋ฐฉํฅ์ด๋ค.
- ์์ ์
- ์์ ๋ฐฉํฅ
- ์ธ๋
0์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ ๊ธธ์ด๊ฐ 1์ธ ์ ๋ถ์ด๋ค. 1์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ 0์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ๋ ์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ํจ ๋ค์ 0์ธ๋ ๋๋๊ณค ์ปค๋ธ์ ๋ ์ ์ ๋ถ์ธ ๊ฒ์ด๋ค. ๋ ์ ์ด๋ ์์ ์ ์์ ์ ๋ถ์ ํ๊ณ ์ด๋ํ์ ๋, ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ ์๋ ์ ์ ์๋ฏธํ๋ค.
๋๋๊ณค ์ปค๋ธ์ ์ ๋ณด๋ ๋ค ์ ์ x, y, d, g๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. x์ y๋ ๋๋๊ณค ์ปค๋ธ์ ์์ ์ , d๋ ์์ ๋ฐฉํฅ, g๋ ์ธ๋์ด๋ค. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10)
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋๋๊ณค ์ปค๋ธ๋ ๊ฒฉ์ ๋ฐ์ผ๋ก ๋ฒ์ด๋์ง ์๋๋ค. ๋๋๊ณค ์ปค๋ธ๋ ์๋ก ๊ฒน์น ์ ์๋ค.
๋ฐฉํฅ์ 0, 1, 2, 3 ์ค ํ๋์ด๊ณ , ๋ค์์ ์๋ฏธํ๋ค.
- 0: x์ขํ๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ (→)
- 1: y์ขํ๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ (↑)
- 2: x์ขํ๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ (←)
- 3: y์ขํ๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ (↓)
์ด๋, ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ๋ค ๊ผญ์ง์ ์ด ๋ชจ๋ ๋๋๊ณค ์ปค๋ธ์ ์ผ๋ถ์ธ ์ ์ฌ๊ฐํ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐จ ์ด ๋ฌธ์ ๋ ๊ฐ๊ฐ์ ํ๋ ฌ์ ์นธ์ด ์๋ ์ค๋ก ๋ณธ๋ค. ํฌ๊ธฐ๊ฐ 100x100 ์ด์ง๋ง 101๊ฐ์ฉ ์์ฑํด์ค์ผํ๋ค.
(๋ฌธ์ ๋ฅผ ์ ๋ณด๋ฉด '๊ฒฉ์์ ์ขํ๋ (x, y)๋ก ๋ํ๋ด๋ฉฐ, 0 ≤ x ≤ 100, 0 ≤ y ≤ 100๋ง ์ ํจํ ์ขํ์ด๋ค.' ๋ผ๊ณ ๋์ด์๋ค.)
๋จผ์ 101x101 ํฌ๊ธฐ์ ํ๋ ฌ๊ณผ ๋๋๊ณค ์ปค๋ธ ์ขํ๋ค์ ์ ์ฅํ set()์ ์์ฑํ๋ค.
set()์ผ๋ก ์์ฑํ๋ ์ด์ ๋ ๋๋๊ณค ์ปค๋ธ๊ฐ ๊ฒน์น ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
graph = [[0] * 101 for _ in range(101)]
curved = set() # ๋๋๊ณค ์ปค๋ธ๊ฐ ์์ฑ๋ ์ขํ
์๋ก์ด ๋๋๊ณค ์ปค๋ธ๋ ๊ธฐ์กด ๋๋๊ณค ์ปค๋ธ์ ๋์ ์์๋ถํฐ ์์๋๋ค.
๋์ ์์๋ถํฐ ๊ธฐ์กด ๋๋๊ณค ์ปค๋ธ๋ฅผ 90º ํ์ ํ ๋ชจ์ต์ ๊ฑฐ๊พธ๋ก ๊ทธ๋ ค๋๊ฐ๋์
์ด๋ค.
์ฆ, 0์ธ๋๋ถํฐ N์ธ๋๊น์ง์ ๋ฐฉํฅ ๋ณํ๊ฐ์ ๋ชจ๋ ์ ์ฅํด์ฃผ๋ฉด ๋๋ค.
์ฐ์ ์ฃผ์ด์ง ๋ฐฉํฅ ์ ๋ณด์ ๋ง๊ฒ ๋ฐฉํฅ๊ฐ์ ์ค์ ํด์ค๋ค.
directions = [(0, 1), (-1, 0), (0, -1), (1, 0)]
์ฐจ๋ก๋๋ก ๋, ๋ถ, ์, ๋จ ๋ฐฉํฅ์ด๋ค.
x, y = 0, 0 ์ด๊ณ ๋ฐฉํฅ์ด 0์ธ ๋๋๊ณค ์ปค๋ธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
(๐จ ์ฐธ๊ณ ๋ก ์ด ๋ฌธ์ ์์์ x, y๋ ํ๋ ฌ์ด ์๋ ์ขํ๊ธฐ์ค์ผ๋ก ์๊ฐํด์ผํ๋ค. x๋ → ๋ฐฉํฅ, y๋ ↓ ๋ฐฉํฅ์ผ๋ก ์ฆ๊ฐํจ.)
์ขํ๋ (x, y), ํ๋ ฌ์ [y, x]๋ก ํ์ํ๊ฒ ๋ค.
0์ธ๋ ๋๋๊ณค ์ปค๋ธ = (0, 0) → (1, 0)
๋ฐฉํฅ์ผ๋ก ๋ฐ์ง๋ฉด ๋์ชฝ →
1์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ๋์ (1, 0)์ ๊ธฐ์ค์ผ๋ก 90º ํ์ ์์ผ์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ 0์ธ๋ ๋๋๊ณค ์ปค๋ธ์ ๋๋ถ๋ถ๋ถํฐ ์์๋ถ๋ถ๊น์ง ๊ฑฐ๊พธ๋ก ๊ทธ๋ ค๋๊ฐ์ผํ๋ค.
1์ธ๋ ๋๋๊ณค ์ปค๋ธ = (1, 0) → (1, -1)
๋ฐฉํฅ์ผ๋ก ๋ฐ์ง๋ฉด ๋ถ์ชฝ ↑
์ ๋ณด๋ฉด ๋ฌธ์ ์์ '์๊ณ๋ฐฉํฅ'์ผ๋ก 90º ํ์ ์์ผ์ผ ํ๋ค๊ณ ํ์ง๋ง, ์ค์ ๋ฐฉํฅ์ ๋(→)์์ ๋ถ(↑)์ผ๋ก ๋ณํํ๊ฒ์ ์ ์ ์๋ค.
๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90º ํ์ ํ๊ฒ์ด๋ค.
์์์ ๋งํ๋ฏ์ด ์๋ก์ด ๋๋๊ณค ์ปค๋ธ๋ ๊ธฐ์กด ์ธ๋์ ๋๋๊ณค ์ปค๋ธ์ ๋๋ถ๋ถ๋ถํฐ '๊ฑฐ๊พธ๋ก' ๊ทธ๋ ค๋๊ฐ์ผํ๋ค.
๋ค์ ๋งํด, [1, 0] → [0, 0] ๋ฅผ 90º ํ์ ํ ๋ฐฉํฅ์ผ๋ก ๊ทธ๋ ค์ผํ๋ค.
๊ทธ๋ผ ์ฐธ๊ณ ํด์ผ ํ ๋ฐฉํฅ์ ๋(→)์ด ์๋ ์(←)๊ฐ ๋๋๊ฒ์ด๋ค.
์(←)๋ฅผ 90º ๋ค์ง์ผ๋ฉด ๋ถ(↑)์ด ๋๋ฏ๋ก, ๋ค์ ๋ฐฉํฅ์ ๊ณ์ฐํ ๋ ํ์ฌ ๋ฐฉํฅ์ '๋ฐ์๊ณ๋ฐฉํฅ'์ผ๋ก 90º ํ์ ํ ๊ฐ์ ๋ง๋ค์ด ์ฃผ๋ฉด ๋๋ค.
์ฆ, ๊ธฐ์กด์ ๋ฐฉํฅ๊ฐ๋ค์ ๋ค์ง์ ํ ํด๋น ๋ฐฉํฅ ์ธ๋ฑ์ค๊ฐ์์ +1 ์ ํด์ฃผ๋ฉด ๋๋๊ฒ์ด๋ค.
์
๋ ฅ๊ฐ์ x, y, d, g ํํ๋ก ์ฃผ์ด์ง๋ค.
0๋ถํฐ g์ธ๋๊น์ง์ ๋ฐฉํฅ์ ์ ์ฅํ๊ณ , ํด๋น ์ขํ๋ฅผ set์ ์ถ๊ฐํ๋ค.
๋ง์ง๋ง์ผ๋ก ์ฌ๊ฐํ์ ๊ฐฏ์๋ฅผ ์ฒดํฌํด์ผ ํ๋ค.
๊ธฐ์ค ์ขํ๊ฐ (0, 0)์ผ๋ ์ฌ๊ฐํ์ ๋๋จธ์ง ์ขํ๋ (0, 1), (1, 1), (1, 0)์ด ๋๋ค.
๋ฐ๋ผ์ 0๋ฒ ํ๋ ฌ๋ถํฐ 99๋ฒ ํ๋ ฌ๊น์ง ์ ์กฐ๊ฑด์ ๋์
ํ๊ณ , ๋ค๊ฐ์ ๊ผญ์ง์ ๋ชจ๋ set์ ์ํ๋ค๋ฉด ์นด์ดํธํ๋ค.
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 31120KB / ์๊ฐ: 44ms
from sys import stdin
input = stdin.readline
N = int(input())
# 100x100 ๊ฒฉ์์ด๋ฏ๋ก ํ๋ ฌ์ 101๊ฐ์ฉ ์์ฑ
graph = [[0] * 101 for _ in range(101)]
directions = [(0, 1), (-1, 0), (0, -1), (1, 0)]
curved = set() # ๋๋๊ณค ์ปค๋ธ๊ฐ ์์ฑ๋ ์ขํ
def curve(g, curr, path):
if g == curr:
return path
# ๋ค์ ์ธ๋์ ๊ฒฝ๋ก = ๊ธฐ์กด ๊ฒฝ๋ก๋ฅผ ๋ค์ง์ ๋ค์ 90º์ฉ ํ์
# ๋ค์ ์ธ๋์ ์์์ ์ ํ์ฌ ์ธ๋์ ๋์ ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ง์ด์ค์ผํจ.
new_path = [(p+1) % 4 for p in reversed(path)]
return curve(g, curr+1, path + new_path)
def checking(y, x, path):
for p in path:
ny, nx = y + directions[p][0], x + directions[p][1]
graph[ny][nx] = 1
curved.add((ny, nx))
y, x = ny, nx
for _ in range(N):
x, y, d, g = map(int, input().split())
# 0์ธ๋๋ถํฐ g์ธ๋๊น์ง์ ๋ฐฉํฅ ๋ณํ๋ฅผ ์ ์ฅ
path = curve(g, 0, [d])
graph[y][x] = 1
curved.add((y, x))
checking(y, x, path)
ret = 0
for i in range(100):
for j in range(100):
if (i, j) in curved and (i+1, j) in curved and (i, j+1) in curved and (i+1, j+1) in curved:
ret += 1
print(ret)
๊ฑฐ๋ถ๋ช ๋ นํ๋ก๊ทธ๋จ์ ๋ ์ฌ๋ฆฌ๊ฒ ํ๋ ๋ฌธ์ ๋ค...