๋ฌธ์ ์ค๋ช
N๊ฐ์ ์ํํธ๊ฐ ์ผ๋ ฌ๋ก ์ญ ๋์ด์ ์์ต๋๋ค. ์ด ์ค์์ ์ผ๋ถ ์ํํธ ์ฅ์์๋ 4g ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ต๋๋ค. ๊ธฐ์ ์ด ๋ฐ์ ํด 5g ์์๊ฐ ๋์์ ธ 4g ๊ธฐ์ง๊ตญ์ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๊พธ๋ ค ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ 5g ๊ธฐ์ง๊ตญ์ 4g ๊ธฐ์ง๊ตญ๋ณด๋ค ์ ๋ฌ ๋ฒ์๊ฐ ์ข์, 4g ๊ธฐ์ง๊ตญ์ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ค ์ํํธ์๋ ์ ํ๊ฐ ๋๋ฌํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด 11๊ฐ์ ์ํํธ๊ฐ ์ญ ๋์ด์ ์๊ณ , [4, 11] ๋ฒ์งธ ์ํํธ ์ฅ์์๋ 4g ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ต๋๋ค. ๋ง์ฝ ์ด 4g ๊ธฐ์ง๊ตญ์ด ์ ํ ๋๋ฌ ๊ฑฐ๋ฆฌ๊ฐ 1์ธ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. (์ ํ์ ๋๋ฌ ๊ฑฐ๋ฆฌ๊ฐ W์ผ ๋, ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ๋ฅผ ์์ชฝ์ผ๋ก W๋งํผ ์ ๋ฌํ ์ ์์ต๋๋ค.)
- ์ด๊ธฐ์, 1, 2, 6, 7, 8, 9๋ฒ์งธ ์ํํธ์๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ต๋๋ค.
- 1, 7, 9๋ฒ์งธ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ ๊ฒฝ์ฐ, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
- ๋ ๋ง์ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ๋ฉด ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ด๋, ์ฐ๋ฆฌ๋ 5g ๊ธฐ์ง๊ตญ์ ์ต์๋ก ์ค์นํ๋ฉด์ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค. ์์ ์์์์ ์ต์ 3๊ฐ์ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํด์ผ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ํํธ์ ๊ฐ์ N, ํ์ฌ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์ ๋ฒํธ๊ฐ ๋ด๊ธด 1์ฐจ์ ๋ฐฐ์ด stations, ์ ํ์ ๋๋ฌ ๊ฑฐ๋ฆฌ W๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ฆ์คํด์ผ ํ ๊ธฐ์ง๊ตญ ๊ฐ์์ ์ต์๊ฐ์ ๋ฆฌํดํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์
์ ํ์ฌํญ
- N: 200,000,000 ์ดํ์ ์์ฐ์
- stations์ ํฌ๊ธฐ: 10,000 ์ดํ์ ์์ฐ์
- stations๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ณ , ๋ฐฐ์ด์ ๋ด๊ธด ์๋ N๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ ์์ฐ์์ ๋๋ค.
- W: 10,000 ์ดํ์ ์์ฐ์
์ ์ถ๋ ฅ ์
์
์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค
์ ์ถ๋ ฅ ์ #2
- ์ด๊ธฐ์, 1~6, 12~16๋ฒ์งธ ์ํํธ์๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ต๋๋ค.
- 3, 6, 14๋ฒ์งธ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ ๊ฒฝ์ฐ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
ํ์ด ์ฝ๋
import math
def solution(n, stations, w):
answer = 0
rest = []
before_end = 0
for s in stations:
start, end = max(s-w,1), min(s+w, n)
if not before_end:
rest.append(start - 1)
before_end = end
else:
if before_end+1 < start:
# ์ ๊ฒน์น๋ ๊ฒฝ์ฐ
rest.append(start - before_end - 1)
before_end = end
rest.append(n-before_end)
for r in rest:
cover = 1 + 2 * w
answer += math.ceil(r / cover)
return answer
์ํ ๊ตฌํ ๋ฐ ์์ด๋์ด ๊ตฌํ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก N์ ์ต๋ 2์ต์ด๋ฏ๋ก, ์์ ํ์์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ํ stations ์ญ์ 10,000์ด๋ฏ๋ก stations์ ๋ํ ๋ฐ๋ณต๋ฌธ์ด O(N^2)์ด ๋๋ฉด ์ ๋๋ค.
ํ์๋ ์ฐ์ , ์ค์น๋ ๊ธฐ์ง๊ตญ์ด ๊ฐ์ฉํ๋ ๋ฒ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ ์๋ฅผ ์ธ๊ธฐ๋ก ํ๋ค.
์๋ฅผ ๋ค์ด, ์ด ๊ฒฝ์ฐ๋ผ๋ฉด ๊ฐ์ฉ๋์ง ์์ ๋ฒ์๋ 1~6, 12~16์ด๋ฏ๋ก [6, 5]๋ฅผ ์ป์ด๋ด๋ ค๊ณ ํ๋ค.
์ค์ํ ์ ์, stations์ ๋ด๋ถ ์์๋ ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ด ๋์ด์๋ค๋ ์ ์ด๋ค.
๋ฐ๋ผ์ sorting ์์ด ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ฒน์น๋ ๋ฒ์์ ๋ํด ์์์ผ๋ก ์์๋ผ ์๊ฐ ์๋ค.
์ด์ ์ ๊ฐ์ฉ๋ฒ์ ๋ ์ง์ + 1 < ํ์ฌ ๊ฐ์ฉ๋ฒ์ ์์ ์ง์ ์ด๋ผ๋ฉด ์ด์ ๊ธฐ์ง๊ตญ๊ณผ ๊ฐ์ฉ๋ฒ์๊ฐ ๊ฒน์น์ง ์๊ณ ,
์ฌ์ด์ ๋น ๊ณต๊ฐ์ด ์๊ธด๋ค๋ ์๋ฏธ์ด๋ค.
์ด ์ ์ ํตํด rest ๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค ์ ์์๋ค.
์ต์ข ์ ์ผ๋ก, ํ ๊ธฐ์ง๊ตญ์ด ๊ฐ์ฉํ ์ ์๋ ์ต๋ ๋ฒ์๋ 1 + 2 * w์ด๋ค.
๊ฐ์ด๋ฐ์ ์ค์นํ๊ณ , ์ ๋ฐฉํฅ์ผ๋ก w ๋งํผ ์ ํ๋ฅผ ์ ๋ฌ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ rest ๋ฐฐ์ด ๋ด์ ์์ r์ ๋ํด 1 + 2 * w๋ก ๋๋ ์ฃผ๊ณ , ์ฌ๋ฆผ ์ฐ์ฐ์ ํด์ฃผ์ด ๋ต์ ๋ฐ์ํ๋ค.
'๐ ์ฝ๋ฉํ ์คํธ ๋๋น : PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ถ๋ ์ฌ์ฉ์ (level3, python) (0) | 2022.09.27 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ผ๊ฐ ๋ฌํฝ์ด (level2, python) (0) | 2022.09.26 |
[ํ๋ก๊ทธ๋๋จธ์ค] 124 ๋๋ผ์ ์ซ์ (level2, python) (1) | 2022.09.25 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฟผ๋์์ถ ํ ๊ฐ์ ์ธ๊ธฐ (level2, python) (1) | 2022.09.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ซ์ ๊ฒ์ (level3, python) (1) | 2022.09.20 |