๋ฐฑ์ค BOJ 32205 ๋ค๋ชจ์ ๊ฟ
https://www.acmicpc.net/problem/32205
ํ์ด์ฌ python ๋ฌธ์ ํ์ด
๋ฌธ์
๊ท์ฌ์ด ์ธ๋ชจ ๋ฑ์ฅ ><
์ธ๋ชจ๋ ๋ค๋ชจ๊ฐ ๋๊ณ ์ถ์ด์. ์ธ๋ชจย N๊ฐ์ ๊ฐ ๋ณ์ ๊ธธ์ด๊ฐ ์ฃผ์ด์ง ๋ ์ํ๋ ์ธ๋ชจ ๋ ๊ฐ๋ฅผ ๊ณจ๋ผ ๊ฐ์ ๊ธธ์ด์ ๋ณ์ด ๋ง๋ฟ๊ฒ ๋ถ์ฌ์ ๋ค๋ชจ๋ฅผ ๋ง๋ค ์ ์๋์ง ์๋ ค์ฃผ์ธ์!
๋ค๋ชจ๋, ๊ผญ์ง์ ์ด ๋ค ๊ฐ์ด๋ฉด์ ์ด๋ค ๋ด๊ฐ๋ 180๋๊ฐ ์๋ ๋จ์ ๋ค๊ฐํ์ด์์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ธ๋ชจ์ ๊ฐ์ย N์ด ์ฃผ์ด์ง๋ค. โ
๋์งธ ์ค๋ถํฐย N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ ์ธ๋ชจ์ ์ธ ๋ณ์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ์ ์ย a,ย b,ย c๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๋ณ์ ๊ธธ์ด๊ฐย a,ย b,ย c์ธ ์ผ๊ฐํ์ ์กด์ฌํ๋ค.ย
์ถ๋ ฅ
์ํ๋ ์ธ๋ชจ ๋ ๊ฐ๋ฅผ ๊ณจ๋ผ ๊ฐ์ ๊ธธ์ด์ ๋ณ์ด ๋ง๋ฟ๊ฒ ๋ถ์ฌ์ ๋ค๋ชจ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉดย 1
, ์์ผ๋ฉดย 0
์ ์ถ๋ ฅํ๋ค.
ํ์ด
๋ ๊ฐ์ ์ผ๊ฐํ์ ๋ง๋ถ์ฌ์ ๋ค๋ชจ(์ฌ๊ฐํ)๋ฅผ ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ ๋ฌธ์ ๋ก, ๋ ์ผ๊ฐํ์ด ๊ฐ์ ๊ธธ์ด์ ๋ณ์ ๊ณต์ ํ๋ฉด์ ๋ถ์ผ๋ฉด ๋ค๋ชจ๊ฐ ๋๋ค.
edges = {}
์ด ๋์
๋๋ฆฌ๋ ํน์ ๊ธธ์ด์ ๋ณ์ ๊ฐ์ง ๋ชจ๋ ์ผ๊ฐํ๋ค์ ์ ๋ณด
๋ฅผ ์ ์ฅ
- ํค: ๋ณ์ ๊ธธ์ด
- ๊ฐ: ๊ทธ ๊ธธ์ด์ ๋ณ์ ๊ฐ์ง ์ผ๊ฐํ๋ค์ ๋๋จธ์ง ๋ ๋ณ์ ๊ธธ์ด๋ฅผ ํํ๋ก ์ ์ฅ
for a, b, c in tris:
if a not in edge:
edge[a] = []
if b not in edge:
edge[b] = []
if c not in edge:
edge[c] = []
edge[a].append((b, c))
edge[b].append((a, c))
edge[c].append((a, b))
- ๊ฐ ์ผ๊ฐํ(a, b, c)์ ๋ํด
- a ๊ธธ์ด์ ๋ณ์ ๊ณต์ ํ๋ค๋ฉด: ๋๋จธ์ง ๋ ๋ณ (b, c)๋ฅผ edge[a]์ ์ ์ฅ
- b ๊ธธ์ด์ ๋ณ์ ๊ณต์ ํ๋ค๋ฉด: ๋๋จธ์ง ๋ ๋ณ (a, c)๋ฅผ edge[b]์ ์ ์ฅ
- c ๊ธธ์ด์ ๋ณ์ ๊ณต์ ํ๋ค๋ฉด: ๋๋จธ์ง ๋ ๋ณ (a, b)๋ฅผ edge[c]์ ์ ์ฅ
์๋ฅผ ๋ค์ด, [3, 4, 5]์ [3, 7, 8] ๋ ์ผ๊ฐํ์ด ์๋ค๋ฉด
- edge[3]์๋ [(4, 5), (7, 8)]์ด ์ ์ฅ
๊ธธ์ด๊ฐ 3์ธ ๋ณ์ ๊ฐ์ง ์ผ๊ฐํ๋ค์ ๋๋จธ์ง ๋ ๋ณ์ ๊ธธ์ด๋ค
์ ์๋ฏธ
for edge_length, triangle_side in edge.items():
if len(triangle_side) >= 2: # ๊ฐ์ ๊ธธ์ด์ ๋ณ์ ๊ฐ์ง ์ผ๊ฐํ์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ
for i in range(len(triangle_side)):
for j in range(i + 1, len(triangle_side)):
side1, side2 = triangle_side[i]
side3, side4 = triangle_side[j]
sides = [side1, side2, side3, side4]
sides.sort()
if sides[3] < sides[0] + sides[1] + sides[2]:
return True
- ๊ฐ ๋ณ์ ๊ธธ์ด๋ง๋ค, ๊ทธ ๊ธธ์ด๋ฅผ ๊ณต์ ํ๋ ์ผ๊ฐํ์ด 2๊ฐ ์ด์ ์๋์ง ํ์ธ
- ๋ง์ฝ ์๋ค๋ฉด, ๋ ์ผ๊ฐํ์ ์ ํํด์ ์ฌ๊ฐํ์ ๋ง๋ค ์ ์๋์ง ํ๋จ
- ์ฌ๊ฐํ์ด ๋ ์ ์๋ ์กฐ๊ฑด: ๊ฐ์ฅ ๊ธด ๋ณ < ๋๋จธ์ง ์ธ ๋ณ์ ํฉ
- ์ด๋ ์ฌ๊ฐํ์ ์ฑ๋ฆฝ ์กฐ๊ฑด์ผ๋ก, ์ด ์กฐ๊ฑด์ด ๋ง์กฑ๋์ง ์์ผ๋ฉด ์ฌ๊ฐํ์ด ์๋ ์ผ์๋ก ํด์ง ํํ๊ฐ ๋๋ค
์๋ฅผ ๋ค์ด, ์ผ๊ฐํ [3, 4, 5]์ [3, 7, 8]์ ๊ธธ์ด 3์ธ ๋ณ์์ ๋ถ์ธ๋ค๋ฉด
- ์ฌ๊ฐํ์ ๋ค ๋ณ์ 4, 5, 7, 8์ด ๋จ
- ๊ฐ์ฅ ๊ธด ๋ณ(8) < ๋๋จธ์ง ๋ณ์ ํฉ(4+5+7=16)์ด๋ฏ๋ก ์ฌ๊ฐํ ํ์ฑ์ด ๊ฐ๋ฅํจ
์ ์ฒด ์ฝ๋
# 32205 ๋ค๋ชจ์ ๊ฟ
import sys
def sq_check(tri):
ย ย # ๊ฐ ๋ณ์ ๊ธธ์ด๋ฅผ ํค๋ก ํ๋ ํด์๋งต์ ์์ฑ
ย ย # ๊ฐ์ ํด๋น ๋ณ์ ๊ฐ์ง ์ผ๊ฐํ๋ค์ ๋ค๋ฅธ ๋ ๋ณ์ ๊ธธ์ด ์์ ์ ์ฅ
ย ย edge = {}
ย ย for a, b, c in tri:
ย ย ย ย if a not in edge:
ย ย ย ย ย ย edge[a] = []
ย ย ย ย if b not in edge:
ย ย ย ย ย ย edge[b] = []
ย ย ย ย if c not in edge:
ย ย ย ย ย ย edge[c] = []
ย ย ย ย edge[a].append((b, c))
ย ย ย ย edge[b].append((a, c))
ย ย ย ย edge[c].append((a, b))
ย ย # ๊ฐ ๋ณ ๊ธธ์ด์ ๋ํด ํ์ธ
ย ย for edge_length, triangle_side in edge.items():
ย ย ย ย # ๊ฐ์ ๊ธธ์ด์ ๋ณ์ ๊ฐ์ง ์ผ๊ฐํ์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ์๋ง ํ์ธ
ย ย ย ย if len(triangle_side) >= 2:
ย ย ย ย ย ย for i in range(len(triangle_side)):
ย ย ย ย ย ย ย ย for j in range(i + 1, len(triangle_side)):
ย ย ย ย ย ย ย ย ย ย side1, side2 = triangle_side[i]
ย ย ย ย ย ย ย ย ย ย side3, side4 = triangle_side[j]
ย ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย ย ย # ์ผ๊ฐํ์ ๋ถ์์ ๋ ์ฌ๊ฐํ์ด ๋ ์ ์๋์ง ๊ฒ์ฌ
ย ย ย ย ย ย ย ย ย ย # ์ผ๊ฐํ ๋ถ๋ฑ์์ ํ์ฉํ์ฌ ์ฌ๊ฐํ์ด ๋ ์ ์๋์ง ํ์ธ
ย ย ย ย ย ย ย ย ย ย # ๋ค ๋ณ์ ๊ธธ์ด๋ฅผ a, b, c, d๋ผ ํ ๋,
ย ย ย ย ย ย ย ย ย ย # ๊ฐ์ฅ ๊ธด ๋ณ < ๋๋จธ์ง ์ธ ๋ณ์ ํฉ์ด์ด์ผ ์ฌ๊ฐํ ํ์ฑ ๊ฐ๋ฅ
ย ย ย ย ย ย ย ย ย ย sides = [side1, side2, side3, side4]
ย ย ย ย ย ย ย ย ย ย sides.sort()
ย ย ย ย ย ย ย ย ย ย
ย ย ย ย ย ย ย ย ย ย if sides[3] < sides[0] + sides[1] + sides[2]:
ย ย ย ย ย ย ย ย ย ย ย ย return True
ย ย return False
ย ย # ๋ชจ๋ ๊ฐ๋ฅํ ๋ณ์ ๊ธธ์ด์ ์ผ๊ฐํ ์์ ๋ํด ํ์ธ
ย ย # ํ๋๋ผ๋ ์ฌ๊ฐํ์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๋ฐ๋ก True๋ฅผ ๋ฐํ
ย ย # ๋๊น์ง ์ฐพ์ง ๋ชปํ๋ฉด False๋ฅผ ๋ฐํ
n = int(sys.stdin.readline())
tri = []
for _ in range(n):
ย ย a, b, c = map(int, sys.stdin.readline().split())
ย ย tri.append((a, b, c))
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
if sq_check(tri):
ย ย print(1)
else:
ย ย print(0)