โ 2295 ์ธ ์์ ํฉ โ
import sys
input=sys.stdin.readline
def binary_search(target, l):
start,end=0,len(l)-1
while start<=end:
mid=(start+end)//2
if l[mid] == target:return True
elif l[mid] > target:
end=mid-1
else:
start=mid+1
return False
#O(N^2logN)
N=int(input())
U=set()
for _ in range(N): U.add(int(input()))
L=list(U)
L.sort()
two=[]
for x in range(len(L)):
for y in range(x,len(L)):
two.append(L[x]+L[y])
two.sort()
for x in range(len(L)-1,-1,-1):
for y in range(0,x):
if binary_search(L[x]-L[y],two):
print(L[x])
sys.exit()
๐ (์ค๋ณตํด์) ์ธ ์์ ํฉ์ด ์งํฉ U์ ์กด์ฌํ๋๋ฐ, ๊ทธ ์ค ์ต๋๊ฐ ์ถ๋ ฅ ๋ฌธ์ ๋ก, ์ด๋ถํ์ ์์ฉ๋ฌธ์ . ๋ฌด์ธ๊ฐ ๋ ๊ฐ๋ฅผ ๋ฌถ๊ณ ๋๋จธ์ง ํ ์ชฝ์ ๊ฐ์ ์ด๋ถํ์์ผ๋ก ์ฐพ์๋ด๋ ์ ํ
๐
โ two []์ ๋ ๊ฐ์ ํฉ ์ ์ฅ
โก two list์์ ์ด๋ถํ์ ํด์ผ ํ๋ฏ๋ก ์ ๋ ฌ
โข ์ธ ์์ ํฉ ํ๋ณด๋ฅผ ์ต๋๊ฐ๋ถํฐ ์ฐจ๋ก๋๋ก two list์ binary search ํ์ → ์ฐพ์ผ๋ฉด ์ธ ์์ ํฉ ์ต๋๊ฐ ๋ฐ๋ก ์ฐพ์์ผ๋ฏ๋ก sys.exit()
(๋ฌด์กฐ๊ฑด ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ง ์์ผ๋ฏ๋ก ์๋ ๊ฒฝ์ฐ ๊ณ ๋ ค x)
๐ ์ธ ์์ ํฉ๊น์ง O(N^4) ์๊ฐ ๋ณต์ก๋๋ฅผ ๋จผ์ ๋ ์์ ํฉ์ ๋ง๋ค๊ณ ๊ฑฐ๊พธ๋ก ์ ์ฒด์์ ํ ์๋ฅผ ๋บ ๊ฒฐ๊ณผ๊ฐ ๋ ์์ ํฉ์ ์๋ ์ง(binary search) ์์๋ณด๋ ์๊ฐ ๋ณต์ก๋๋ [์ ์ฒด์์ ํ ์๋ฅผ ๋บ ๊ฒฐ๊ณผ ๋ง๋ค๊ธฐ O(N^2)] ๊ณฑํ๊ธฐ [binary search ์๊ฐ๋ณต์ก๋(O(log(N^2)) - two list ๊ธธ์ด N^2]
: ๋ฐ๋ผ์ ์ต์ข ์๊ฐ ๋ณต์ก๋๋ O(N^2log(N^2))๋ก O(N^2log(N))๋ง์ ๊ตฌํ ์ ์๋ค.
โ 3079 ์ ๊ตญ์ฌ์ฌ โ
import sys
input=sys.stdin.readline
N,M=map(int,input().split())
Ts=[int(input()) for _ in range(N)]
Ts.sort()
start,end=min(Ts),M*max(Ts)
while start<=end:
mid=(start+end)//2
total=[mid//T for T in Ts]
total_T=sum(total)
if total_T >= M:
ans=mid
end=(mid-1)
else:
start=mid+1
print(ans)
๐ ์ต์ ์ ์ต์๊ฐ ์๊ฐ์ ์ฐพ๊ธฐ ์ํด ์ต์๊ฐ + ์ต๋๊ฐ ์๊ฐ ๋ฃ๊ณ ์ด๋ถํ์ ๋๋ฆฌ๋ ์ ํ์ ์ธ ๋ฌธ์
๐
โ start, end ์ค์ : start๋ ์ฌ์ฌ๋ ์ค ๊ฐ์ฅ ์งง๊ฒ ๊ฑธ๋ฆฌ๋ ์๊ฐ / end๋ ๊ฐ์ฅ ๊ธธ๊ฒ ๊ฑธ๋ฆฌ๋ ์ฌ์ฌ๋์ ๋ชจ๋ ์ฌ๋๋ค ๋ค ์ค ์ ์ต๋๊ฐ ์๊ฐ
โก mid ๊ตฌํ๋ฉฐ binary search ์งํ
โข mid๋ก ๊ตฌํ ์๊ฐ ๋ด์ ๊ฐ ์ฌ์ฌ๋๋ณ ์์ฉ ๊ฐ๋ฅ ์ต๋ ์ธ์ ์ ๋ชจ๋ ๋ํ ํฉ์ด ์ธ์ ์ M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด mid๋ฅผ ์ค์ด๊ธฐ ์ํด end = mid - 1(์ด ๋๋ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฏ๋ก ans์ mid ์ ๋ฐ์ดํธ) / ๊ทธ ๋ฐ๋๋ผ๋ฉด mid๋ฅผ ํค์ฐ๊ธฐ ์ํด start = mid + 1
โฃ ์ต์ข ์ ์ผ๋ก while๋ฌธ ๋๋ฌ์ ๋ ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธํ ans ์ถ๋ ฅ
→ M๋ช ์ ๋ชจ๋ ์ฌ์ฌ๋์ ๊ฐ๊ฐ ๋ฃ์ด์ ๊ฐ๋ฅ case๋ฅผ ์ผ์ผ์ด ์ฐพ๋ ๊ฒ๋ณด๋ค. ๋ฐ๋๋ก ์๊ฐํด ๊ฐ๋ฅ ์๊ฐ์ mid๋ก ํ์ํด ๋๊ฐ๋ฉด์ ๊ฐ ์ฌ๊ถ ์ฌ์ฌ๋์ ํด๋น ๊ฐ๋ฅ ์๊ฐ ๋ด์ ์์ฉ ๊ฐ๋ฅ ์ธ์์ ์ญ ๊ตฌํด ์ต์ข ๋ํ ๊ฒฐ๊ณผ๊ฐ M๋ช ์ ๋๋ ์ง / ์ ๋๋์ง์ ๋ฐ๋ผ ์ด๋ถํ์ ์งํ์ด ๋ฐ๋์ง(O(logN + log(N)*N))
ex) ์ ์์ (1) mid 30์ด๋ผ๋ฉด ์์ฉ ๊ฐ๋ฅ ์ธ์๋ณด๋ค ํฌ๋ฏ๋ก mid๋ฅผ ์ค์ด๊ธฐ ์ํด end = mid - 1 / ๋ฐ๋๋ก (2) mid 5๋ผ๋ฉด ์์ฉ ๊ฐ๋ฅ ์ธ์๋ณด๋ค M๋ช ์ด ์์ผ๋ฏ๋ก mid๋ฅผ ํค์ฐ๊ธฐ ์ํด start = mid + 1 ์งํ
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Backtracking Advanced I - 3 Solvedโ (1) | 2024.01.21 |
---|---|
โ DP Upper-Advanced I - 9 Solvedโ (1) | 2024.01.05 |
โ Coordinate Compression Advanced - 2 Solvedโ (0) | 2023.12.28 |
โ Tree Advanced I - 1 Solvedโ (1) | 2023.12.22 |
โ BFS&DFS Advanced I - 13 Solvedโ (0) | 2023.12.15 |
๋๊ธ