๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 14588๋ฒ
ํ์ด ๊ณผ์
์ ๋ถ์ ๊ฒน์นฉ ์ ๋ฌด๋ฅผ ์ด์ฉํด์ ๊ฐ ์ ๋ถ๊ฐ์ ์ต์ ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
๋ชจ๋ ์ ๋ถ๊ฐ์ ์ต์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ์์์ผํ๊ณ N
์ด ์ต๋ 300
์ด๊ธฐ ๋๋ฌธ์ ํ๋ก์ด๋ ์์ฌ
์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๋ถ ๊ฒน์นฉ ์ฐ์ฐ๊ณผ ๊ด๋ จํด์ ๋ค๋ฅธ ๋ถ์ ์ ์ถ ์ฝ๋๋ฅผ ํ์ธํด๋ดค๋๋ฐ
๋ค์๊ณผ ๊ฐ์ ์ข์ ๋ฐฉ๋ฒ๋ ์๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
a1, b1 = ์ ๋ถ 1 ์ ๋์
a2, b2 = ์ ๋ถ 2 ์ ๋์
if max(a1, a2) <= min(b1, b2):
# ๋ ์ ๋ถ ๊ฒน์นจ
์ ์ฝ๋๋ ๋ ์ ๋ถ๊ฐ์ ๋ ์ ์ ์ด์ฉํด์ max, min
์ ๊ณ์ฐํ๊ณ ์ด๋ฅผ ๋น๊ตํ์ฌ ๊ฒน์นจ ์ ๋ฌด๋ฅผ ํ๋จํ๋ ์์ฌ์ฝ๋์
๋๋ค.
์ดํ์ ์ด์ ์ ์ฌํ๊ฒ ์ ๋ถ ๊ฒน์นจ ์ ๋ฌด๋ฅผ ํ๋จํด์ผ ํ ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๐
์ฝ๋
import sys
N = int(input())
lines = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
Q = int(input())
questions = [list(map(int, sys.stdin.readline().split())) for _ in range(Q)]
def check_overlap(pivot, opponent):
if opponent[0] > pivot[1]:
return False
elif opponent[1] < pivot[0]:
return False
return True
def make_graph():
dist = [[sys.maxsize] * N for _ in range(N)]
for (p_idx, pivot) in enumerate(lines):
for (o_idx, opponent) in enumerate(lines):
if p_idx != o_idx and check_overlap(pivot, opponent):
dist[p_idx][o_idx] = 1
return dist
def floyd(dist):
for v in range(N):
dist[v][v] = 0
for k in range(N):
for u in range(N):
for v in range(N):
dist[u][v] = min(dist[u][v], dist[u][k] + dist[k][v])
def solution():
dist = make_graph()
floyd(dist)
for frm, to in questions:
cost = dist[frm - 1][to - 1]
answer = cost if cost != sys.maxsize else -1
print(answer)
solution()
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 17521 - Byte Coin (0) | 2021.03.14 |
---|---|
BOJ 20363 - ๋น๊ทผ ํค์ฐ๊ธฐ (0) | 2021.03.14 |
BOJ 14925 - ๋ชฉ์ฅ ๊ฑด์คํ๊ธฐ (0) | 2021.03.14 |
BOJ 13164 - ํ๋ณต ์ ์น์ (0) | 2021.03.14 |
BOJ 3109 - ๋นต์ง (0) | 2021.03.14 |
๐ฌ ๋๊ธ