๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 15732๋ฒ
ํ์ด ๊ณผ์
์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋ํ ๋ฆฌ๊ฐ ๋์ฌ์๋ค๊ณ ํ์ ๋ ํน์ ์์์ ๋ํ ๋ฆฌ๊ฐ ๋ค์ด์๋ ์์์ ์์น๋ฅผ ์ฐพ๋ ๋ฌธ์ ์
๋๋ค.
๋ง์ฝ ์ฃผ์ด์ง ๊ท์น๋ค์ ๋ชจ๋ ์ํํด๋ณด๊ณ ๋ํ ๋ฆฌ์ ์์น๋ฅผ ์ฐพ๋ ๋ธ๋ฃจํธ ํฌ์ค
๋ฅผ ์ํํ๋ค๋ฉด
์ต์
์ ๊ฒฝ์ฐ O(NK)
์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋์ ์ ์ํ๊ณผ ํํ์ ์ค์ ํ ๋ค ์ด๋ถ ํ์
์ ํ์ฉํด์ ๋ง์ง๋ง ๋ํ ๋ฆฌ๊ฐ ์๋ ์์์ ์์น๋ฅผ ์ฐพ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ๊ฐ์ ์์น์์ ํด๋น ์ง์ ์ด ๋ง์ง๋ง ๋ํ ๋ฆฌ๋ผ๋ ์ฌ์ค์ ์ด๋ป๊ฒ ํ๋จํ ์ ์์๊น์?
์ด๋ ๋ฐ๋ก ๊ฐ ๊ท์น์ ๋ชจ๋ ์ํํ๋ฉด์ ํน์ ์ง์ x
๋ณด๋ค ์์ ์๋ ๋ํ ๋ฆฌ์ ๊ฐ์๋ฅผ ์ธ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ฐ ๊ท์น์ ์์ ์์น๋ฅผ init
, ๊ฐ๊ฒฉ์ step
, ๊ธฐ์ค ์ง์ ์ x
๋ผ๊ณ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ฑ์์ด ์ฑ๋ฆฝํฉ๋๋ค.
init + step * a <= x
์ฌ๊ธฐ์ a
๋ step
์ ๊ฐ์์ด๋ฉฐ a + 1
์ด x
์ ๊ฐ๊ฑฐ๋ ์์ ์์์ ๊ฐ์๊ฐ ๋ฉ๋๋ค.
์ฝ๋
import sys
N, K, D = list(map(int, sys.stdin.readline().split()))
rules = [list(map(int, sys.stdin.readline().split())) for _ in range(K)]
def dotori(pivot):
total = 0
for start, end, step in rules:
beta = min(end, pivot)
if start <= beta:
calc = (beta - start) // step + 1
total += calc
return total
def solution():
lo, hi = 1, 1000000
ans = 0
while lo <= hi:
mid = (lo + hi) // 2
if dotori(mid) >= D:
ans = mid
hi = mid - 1
else:
lo = mid + 1
return ans
print(solution())
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 2869 - ๋ฌํฝ์ด๋ ์ฌ๋ผ๊ฐ๊ณ ์ถ๋ค (0) | 2021.04.13 |
---|---|
BOJ 16926 - ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 1 (0) | 2021.04.13 |
BOJ 2178 - ๋ฏธ๋ก ํ์ (0) | 2021.03.18 |
BOJ 6593 - ์๋ฒ ๋น๋ฉ (0) | 2021.03.18 |
BOJ 16397 - ํ์ถ (0) | 2021.03.18 |
๐ฌ ๋๊ธ