๋ฌธ์
์๊ฐ ๊ธธ์ ๊ฑด๋๊ฐ ์ด์ ๋ ๊ทธ๋ฅ ๊ธธ์ด ๋ง์์์ด๋ค. ์กด์ ๋์ฅ์๋ ๊ธธ์ด ๋๋ฌด ๋ง์์, ๊ธธ์ ๊ฑด๋์ง ์๊ณ ์๋ ๋ณ๋ก ๋์๋ค๋ ์๊ฐ ์๋ค.
์กด์ ๋์ฅ์ ๋๋์ ์ธ ๊ฐํธ์ด ์์๋ค. ์ด์ ์์ ์ ์ฌ๊ฐํ ๋ชฉ์ด์ง๊ฐ N×N (2 ≤ N ≤ 100) ๊ฒฉ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ธ์ ํ ๋ชฉ์ด์ง ์ฌ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ๋กญ๊ฒ ๊ฑด๋๊ฐ ์ ์์ง๋ง, ๊ทธ ์ค ์ผ๋ถ๋ ๊ธธ์ ๊ฑด๋์ผ ํ๋ค. ๋์ฅ์ ๋ฐ๊นฅ์๋ ๋์ ์ธํ๋ฆฌ๊ฐ ์์ด์ ์๊ฐ ๋์ฅ ๋ฐ์ผ๋ก ๋๊ฐ ์ผ์ ์๋ค.
K๋ง๋ฆฌ์ (1 ≤ K ≤ 100,K ≤ N2) ์๊ฐ ์กด์ ๋์ฅ์ ์๊ณ , ๊ฐ ์๋ ์๋ก ๋ค๋ฅธ ๋ชฉ์ด์ง์ ์๋ค. ์ด๋ค ๋ ์๋ ๊ธธ์ ๊ฑด๋์ง ์์ผ๋ฉด ๋ง๋์ง ๋ชป ํ ์ ์๋ค. ์ด๋ฐ ์๊ฐ ๋ช ์์ธ์ง ์ธ์ด๋ณด์.
์ ๋ ฅ
์ฒซ ์ค์ N, K, R์ด ์ฃผ์ด์ง๋ค. ๋ค์ R์ค์๋ ํ ์ค์ ํ๋์ฉ ๊ธธ์ด ์ฃผ์ด์ง๋ค. ๊ธธ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ ๋ชฉ์ด์ง๋ฅผ ์๊ณ , r c r′ c′์ ํํ (ํ, ์ด, ํ, ์ด)๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ์๋ 1 ์ด์ N ์ดํ์ด๋ค. ๊ทธ ๋ค์ K์ค์๋ ํ ์ค์ ํ๋์ฉ ์์ ์์น๊ฐ ํ๊ณผ ์ด๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ธธ์ ๊ฑด๋์ง ์์ผ๋ฉด ๋ง๋ ์ ์๋ ์๊ฐ ๋ช ์์ธ์ง ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
from collections import deque
n,k,r=map(int, sys.stdin.readline().split(' '))
# dummy
graph=[[0]*(n+1) for _ in range(n+1)]
# 3์ฐจ์ ๋ฐฐ์ด
ways=[[[] for _ in range(n+1)] for _ in range(n+1)]
for i in range(1,r+1):
r,c,r_,c_=map(int, sys.stdin.readline().split(' '))
ways[r][c].append((r_, c_))
ways[r_][c_].append((r,c))
cow=[]
for _ in range(k):
y,x=map(int, sys.stdin.readline().split(' '))
cow.append((y,x))
def impossible_meet_cow(sy, sx, ey, ex):
global ways
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
queue=deque()
queue.append((sy,sx))
visited=[[0]*(n+1) for _ in range(n+1)]
visited[sy][sx]=1
while queue:
cury, curx=queue.popleft()
if cury==ey and curx==ex:
return False
for di in directions:
dy=cury+di[0]
dx=curx+di[1]
if 1<=dy<=n and 1<=dx<=n and visited[dy][dx]==0:
# (dy,dx)๊ฐ ways[cury][curx]์ ์กด์ฌํ๋์ง ์ฆ, ๊ธธ์ ๊ฑด๋์ผ๋ง ๊ฐ ์ ์๋ ๊ณณ์ธ์ง ํ์ธ
if (dy,dx) not in ways[cury][curx]:
queue.append((dy,dx))
visited[dy][dx]=1
else:
return True
ans=0
for i in range(k):
for j in range(i,k):
# start cow
sc_y, sc_x=cow[i]
# end cow
ec_y, ec_x=cow[j]
if impossible_meet_cow(sc_y, sc_x, ec_y,ec_x):
ans+=1
print(ans)
3์ฐจ์ ๋ฐฐ์ด ways[][][]์ ๊ฐ ์์น์์ ๊ฐ ์ ์๋ ์์น๋ฅผ ํํ ํํ๋ก ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ cow ๋ฐฐ์ด์ ์๋ค์ ์์น๋ฅผ ์ ์ฅํ๋ค.
2์ค for๋ฌธ์ ์ด์ฉํด์ ์๋ค์ ์์น 2๊ฐ๋ฅผ ์ ํํด์ฃผ๋๋ฐ, ์ด๋ ์ค๋ณต์ ํผํ๊ธฐ ์ํด์ ์ฒซ๋ฒ์งธ ์ ํ๋ ์์น๋ณด๋ค ์ธ๋ฑ์ค๊ฐ ํฐ ์์น๋ฅผ ์ ํํ๋ค.
์ด๋ ๊ฒ ์ ํ๋ ์ถ๋ฐ ์์ ์์น์ ๋์ฐฉ ์์ ์์น๋ฅผ impossible_meet_cow ํจ์๋ฅผ ํตํด์ ๊ธธ์ ๊ฑด๋์ง ์๊ณ ๋ ๋์ฐฉ์ด ๋ถ๊ฐ๋ฅํ์ง ํ์ธํ๋ค.
impossible_meet_cow ํจ์์์๋ bfs ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ , wheile...else...๋ฌธ์ ์ด์ฉํ๋ค.
์ฌ๊ธฐ์, ํ์ํ๋ ํ์ ์์น๋ฅผ ๋ฃ์ด์ฃผ๋ ์กฐ๊ฑด์ ๊ฒฉ์ํ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์์ผ๋ฉด์, ๋ฐฉ๋ฌธํ ์ ์๊ณ , ํ์ฌ ์์น์์ ๋๋ฌ์ด ๋ถ๊ฐ๋ฅํ ์์น๊ฐ ์๋๋ฉด ๋ฃ์ด์ค๋ค.
while๋ฌธ ์์์ ๋์ฐฉ ์์น์ ๋๋ฌ์ด ๊ฐ๋ฅํ๋ฉด False๋ฅผ ๋ฐํํ๊ณ , ๋ถ๊ฐ๋ฅํ๋ฉด else๋ฌธ์ผ๋ก ๋ค์ด๊ฐ True๋ฅผ ๋ฐํํ๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๊ทธ๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 11404 ๐ฅ] ํ๋ก์ด๋ (0) | 2023.07.13 |
---|---|
[๋ฐฑ์ค 11964 ๐ฅ] Fruit Feast (0) | 2023.07.13 |
[๋ฐฑ์ค 7576 ๐ฅ] ํ ๋งํ (0) | 2023.07.12 |
[๋ฐฑ์ค 16918 ๐ฅ] ๋ด๋ฒ๋งจ (0) | 2023.07.10 |
[๋ฐฑ์ค 15591 ๐ฅ] MooTube (Silver) (0) | 2023.07.10 |