CodingTest/Python
BOJ_1548 : ๋ถ๋ถ ์ผ๊ฐ ์์ด
Soom_1n
2022. 9. 11. 23:17
1548๋ฒ: ๋ถ๋ถ ์ผ๊ฐ ์์ด
์ธ ์ x, y, z๊ฐ x+y>z, x+z>y, y+z>x์ ๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ฉด, ์ธ ์๋ ์ผ๊ฐ๊ด๊ณ์ ์๋ค๊ณ ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธธ์ด๊ฐ N์ธ ์์ด B(b[0], b[1], ..., b[n-1])์ ๋ชจ๋ b[i], b[j], b[k]๊ฐ ์ผ๊ฐ๊ด๊ณ์ ์์ผ๋ฉด ์ด ์์ด์ ์ผ๊ฐ
www.acmicpc.net
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ์ ์์๋ก ๋ง๋ค ์ ์๋ ์ผ๊ฐ ์์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
- ๊ทธ๋ฆฌ๋์ ์ธ ๊ด์ ๊ณผ ๋ธ๋ฃจํธํฌ์ค์ ์ ๊ทผ์ด ๋ชจ๋ ํ์ํ๋ค.
- ์ ๋ ฅ๋ฐ์ ๋ฆฌ์คํธ๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์๋, arr[i] + arr[i+1] > arr[n] ์ ๋ง์กฑํ๋ฉด i๋ถํฐ n ์ฌ์ด์ ๋ชจ๋ ์๋ค๋ ์ผ๊ฐ๊ด๊ณ์ด๋ค. (๊ทธ๋ฆฌ๋)
- ๊ฐ์ฅ ์์ด๋ ๊ฐ์ฅ ๋ค๋ฅผ ๋นผ๊ฐ๋ฉฐ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์ผ๊ฐ ์์ด์ ์ฐพ๋๋ค. (๋ธ๋ฃจํธํฌ์ค)
- 0 ~ n-1 >> 1 ~ n-1 >> ... >> n-2 ~ n-1
- 1 ~ n-2 >> 2 ~ n-2 >> ... >> n-3 ~ n-2
- ์์๋ ๋ค์๊บผ ํ๋๋นผ๋ณด๊ณ ์์๊ฑฐ ํ๋ ๋นผ๋ณด๊ณ ..(๋ฐ๋ณต)
๐ธ ์ฝ๋ ๐ธ
n = int(input())
arr = list(map(int,input().split()))
arr.sort()
def solution(N, arr):
for n in range(N, 0, -1):
for i in range(N - n + 1):
print(n, i)
if n < 3 or arr[i]+arr[i+1] > arr[i+n-1]:
return n
print(solution(n, arr))
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ค, ์ ์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ค์ฌ๊ฐ๋ณด๋ฉฐ ์ผ๊ฐ ์์ด์ธ์ง ํ์ธํ๋ค.
- ์ต์ด๋ก ๋ฐ๊ฒฌ๋ ์ผ๊ฐ ์์ด์ ๊ธธ์ด๊ฐ ์ต๋๊ฐ์ด๋ค.
๐ธ ์ค๋ต ์ฝ๋ ๐ธ
##########################################
# dfs๋ฅผ ์ฌ์ฉํ ํ์ด : ์๊ฐ์ด๊ณผ
##########################################
n = int(input())
arr = list(map(int,input().split()))
arr.sort()
answer = 0
before = -1
def triple(b):
for i in range(len(b)-1):
for j in range(i+1,len(b)):
for k in b:
if b[i]+b[j] <= k:
return False
return True
def dfs(d, b):
global answer
if n-d <= answer:
return
if triple(b):
if answer < n-d:
answer = n-d
return
for i in range(len(b)):
if b[i] == b[i-1]:
continue
temp = b[:]
temp.pop(i)
dfs(d+1, temp)
dfs(0, arr)
print(answer)
##########################################
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ ๋ง์ ์กฐํฉ์ dfs์ ์ธต์ ํ๋์ฉ ๋ด๋ ค๊ฐ๋ฉฐ ํ์ธํ๋ ์ฝ๋์ด๋ค.
- ์์ ๋ ๋ชจ๋ ์ ๋ต์ด ๋์ค์ง๋ง ์ ์ถ์ ์๊ฐ์ด๊ณผ๊ฐ ๋์จ๋ค.
๐ธ end ๐ธ
- ๋ธ๋ฃจํธํฌ์ค๋ผ๊ณ dfs ํ๋๋ง ๊ณ์ ํ์ฉํ๋ ค๊ณ ํ๋๋ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋๊ฑธ ๊ฐ๊ณผํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
- dfs๋ก ์๊ฐ์ ๊ฐ๋ฅํ ์ค์ฌ๋ณด๋ ค๊ณ ํ์ง๋ง ํ๋ ์๋๊ฒ ๊ฐ์์ ๊ฒฐ๊ตญ ํ์ด ํฌ์คํ ์ ์ฐพ์๋ณด๊ฒ ๋์๋ค.
- ํ๊ทธ์ ๋ธ๋ฃจํธํฌ์ค์ ๊ทธ๋ฆฌ๋๊ฐ ๊ฐ์ด ์จ์์๋๋ฐ, ์ ๋ฒ์ ํ์๋ ๋ฌธ์ ์ฒ๋ผ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ ์ค ์์๋๋ ๋ ๊ฐ๋
๋ชจ๋ ์ฌ์ฉํด์ผํ๋ ๋ฌธ์ ์๋ค. - ๋ฌธ์ ๋ถ์๋ถํฐ ์๋ชป ์ ๊ทผํ ์ผ์ด์ค์ธ๋ฐ, 1์๊ฐ ์ ํ์ ๋๊ณ ์ด๋ฐ์ ๋ฐ ์๋๋ฅผ ํ๋๊ฑธ ๊ฒ๋ด์ง ๋ง์์ผ๊ฒ ๋ค.
728x90