# ๋ง์น ํ๊ธฐ # 161989 # lv1
# ๋ฌธ์
์ด๋ ํ๊ต์ ํ์ธํธ๊ฐ ์น ํด์ง ๊ธธ์ด๊ฐ n๋ฏธํฐ์ธ ๋ฒฝ์ด ์์ต๋๋ค. ๋ฒฝ์ ๋์๋ฆฌ · ํํ ํ๋ณด๋ ํ์ฌ ์ฑ์ฉ ๊ณต๊ณ ํฌ์คํฐ ๋ฑ์ ๊ฒ์ํ๊ธฐ ์ํด ํ
์ดํ๋ก ๋ถ์๋ค๊ฐ ์ฒ ๊ฑฐํ ๋ ๋ผ๋ ์ผ์ด ๋ง๊ณ ๊ทธ ๊ณผ์ ์์ ํ์ธํธ๊ฐ ๋ฒ๊ฒจ์ง๊ณค ํฉ๋๋ค. ํ์ธํธ๊ฐ ๋ฒ๊ฒจ์ง ๋ฒฝ์ด ๋ณด๊ธฐ ํํด์ ธ ํ๊ต๋ ๋ฒฝ์ ํ์ธํธ๋ฅผ ๋ง์น ํ๊ธฐ๋ก ํ์ต๋๋ค.
๋์ ๋ฒฝ ์ ์ฒด์ ํ์ธํธ๋ฅผ ์๋ก ์น ํ๋ ๋์ , ๊ตฌ์ญ์ ๋๋์ด ์ผ๋ถ๋ง ํ์ธํธ๋ฅผ ์๋ก ์น ํจ์ผ๋ก์จ ์์ฐ์ ์๋ผ๋ ค ํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋ฒฝ์ 1๋ฏธํฐ ๊ธธ์ด์ ๊ตฌ์ญ n๊ฐ๋ก ๋๋๊ณ , ๊ฐ ๊ตฌ์ญ์ ์ผ์ชฝ๋ถํฐ ์์๋๋ก 1๋ฒ๋ถํฐ n๋ฒ๊น์ง ๋ฒํธ๋ฅผ ๋ถ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ธํธ๋ฅผ ๋ค์ ์น ํด์ผ ํ ๊ตฌ์ญ๋ค์ ์ ํ์ต๋๋ค.
๋ฒฝ์ ํ์ธํธ๋ฅผ ์น ํ๋ ๋กค๋ฌ์ ๊ธธ์ด๋ m๋ฏธํฐ์ด๊ณ , ๋กค๋ฌ๋ก ๋ฒฝ์ ํ์ธํธ๋ฅผ ํ ๋ฒ ์น ํ๋ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋กค๋ฌ๊ฐ ๋ฒฝ์์ ๋ฒ์ด๋๋ฉด ์ ๋ฉ๋๋ค.
- ๊ตฌ์ญ์ ์ผ๋ถ๋ถ๋ง ํฌํจ๋๋๋ก ์น ํ๋ฉด ์ ๋ฉ๋๋ค.
์ฆ, ๋กค๋ฌ์ ์ข์ฐ์ธก ๋์ ๊ตฌ์ญ์ ๊ฒฝ๊ณ์ ํน์ ๋ฒฝ์ ์ข์ฐ์ธก ๋๋ถ๋ถ์ ๋ง์ถ ํ ๋กค๋ฌ๋ฅผ ์์๋๋ก ์์ง์ด๋ฉด์ ๋ฒฝ์ ์น ํฉ๋๋ค. ํ์ฌ ํ์ธํธ๋ฅผ ์น ํ๋ ๊ตฌ์ญ๋ค์ ์์ ํ ์น ํ ํ ๋ฒฝ์์ ๋กค๋ฌ๋ฅผ ๋ผ๋ฉฐ, ์ด๋ฅผ ๋ฒฝ์ ํ ๋ฒ ์น ํ๋ค๊ณ ์ ์ํฉ๋๋ค.
ํ ๊ตฌ์ญ์ ํ์ธํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ์น ํด๋ ๋๊ณ ๋ค์ ์น ํด์ผ ํ ๊ตฌ์ญ์ด ์๋ ๊ณณ์ ํ์ธํธ๋ฅผ ์น ํด๋ ๋์ง๋ง ๋ค์ ์น ํ๊ธฐ๋ก ์ ํ ๊ตฌ์ญ์ ์ ์ด๋ ํ ๋ฒ ํ์ธํธ์น ์ ํด์ผ ํฉ๋๋ค. ์์ฐ์ ์๋ผ๊ธฐ ์ํด ๋ค์ ์น ํ ๊ตฌ์ญ์ ์ ํ๋ฏ ๋ง์ฐฌ๊ฐ์ง๋ก ๋กค๋ฌ๋ก ํ์ธํธ์น ์ ํ๋ ํ์๋ฅผ ์ต์ํํ๋ ค๊ณ ํฉ๋๋ค.
์ ์ n, m๊ณผ ๋ค์ ํ์ธํธ๋ฅผ ์น ํ๊ธฐ๋ก ์ ํ ๊ตฌ์ญ๋ค์ ๋ฒํธ๊ฐ ๋ด๊ธด ์ ์ ๋ฐฐ์ด section์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ๋กค๋ฌ๋ก ํ์ธํธ์น ํด์ผ ํ๋ ์ต์ ํ์๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ m ≤ n ≤ 100,000
- 1 ≤ section์ ๊ธธ์ด ≤ n
- 1 ≤ section์ ์์ ≤ n
- section์ ์์๋ ํ์ธํธ๋ฅผ ๋ค์ ์น ํด์ผ ํ๋ ๊ตฌ์ญ์ ๋ฒํธ์ ๋๋ค.
- section์์ ๊ฐ์ ์์๊ฐ ๋ ๋ฒ ์ด์ ๋ํ๋์ง ์์ต๋๋ค.
- section์ ์์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ต๋๋ค.
# ํ์ด
ํ์ด1 (ํ
์คํธ ์ผ์ด์ค๋ง ํต๊ณผ, ์ ๋ต X)
def solution(n, m, section):
# ์์ด๋์ด: n ๋ฏธํฐ ์ง๋ฆฌ ๋ฒฝ. m๋ฏธํฐ์ง๋ฆฌ ๋กค๋ฌ.
# 1. ์์ section[0] ~ section[-1] ๊น์ง์ ๊ฑฐ๋ฆฌ ๋ณด๊ธฐ.
# 2. ์ฒซ ๋ฒ์งธ sec - ๋ ๋ฒ์งธ sec ์ฌ์ด์ ๊ฑฐ๋ฆฌ... ๊ฐ๊ฐ ๊ฐ๊ฒฉ ํ์ธ.
# sec ๊ฐ์ ๊ฐ๊ฒฉ < m ์ด๋ฉด, ๋ sec ํ๊บผ๋ฒ์ ์น ํจ.
# sec ๊ฐ์ ๊ฐ๊ฒฉ = m ์ด๋ฉด, ํ๋์ sec๋ผ๋ฆฌ ์น ํจ.
color = 0
first, last = section[0], section[-1]
full_sec = last - first + 1
if full_sec <= m:
return 1
else:
for i in range(0, len(section) -1):
prev, next_ = section[i], section[i+1]
if next_ - prev == m: # ๊ฐ๊ฒฉ x. ๋ ๊ตฌ๊ฐ์ ๋นผ๊ณ ๋จ์๊ฒ m ๋งํผ์ด๋ผ๋ฉด
color = next_ # next_์ ๊ฐ์ด color ์ ๋์ผ.
elif next_ - prev + 1 <= m: # ๋ ๊ตฌ๊ฐ ์ฌ์ด์ ๊ธธ์ด(๊ฐ๊ฒฉ) + 1์ด m๋งํผ์ด๋ผ๋ฉด
color += 1 # color += 1๋งํผ.
elif next_ - prev + 1 > m: # ๋ ๊ตฌ๊ฐ ์ฌ์ด์ ๊ธธ์ด(๊ฐ๊ฒฉ) + 1์ด m๋ณด๋ค ํฌ๋ค๋ฉด
color += 2 # ๋ ๋ฒ ์น ํด์ผ ํ๋, +2 ... > ์ฌ๊ธฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ฏํจ.
else:
pass
return color
ํ์ด2 (์ ๋ต ํ์ด)
def solution(n, m, section):
# ์์ด๋์ด: n ๋ฏธํฐ ์ง๋ฆฌ ๋ฒฝ. m๋ฏธํฐ์ง๋ฆฌ ๋กค๋ฌ.
# 1. ์์ section[0] ~ section[-1] ๊น์ง์ ๊ฑฐ๋ฆฌ ๋ณด๊ธฐ.
# 2. test sec - previous sec ์ฌ์ด์ ๊ฑฐ๋ฆฌ... ๊ฐ๊ฐ ๊ฐ๊ฒฉ ํ์ธ.
# sec ๊ฐ์ ๊ฐ๊ฒฉ >= m ์ด๋ฉด, ์นธ์ ์น ํจ.
# ์น ํ๊ณ ๋ ๋ค, section[i]์ ๊ฐ์ prev์ ํ ๋น.
color = 1
first, last = section[0], section[-1]
full_sec = last - first + 1
if full_sec <= m: # ์ ์ฒด ๊ธธ์ด๊ฐ ๋ง์ฝ m๋ณด๋ค ์๋ค๋ฉด, ๋ฐ๋ก 1์ ๋ฆฌํด
return color
else:
prev = first # ํท๊ฐ๋ฆฌ์ง ์๊ฒ prev๋ผ๋ ์๋ก์ด ๋ณ์ ์์ฑ.
for i in range(1, len(section)):
if section[i] - prev >= m: # sec
color += 1
prev = section[i] # ๋ค์ ๊ตฌ๊ฐ์ prev์ ํ ๋นํ๊ณ ๋ค์ for๋ฌธ์ผ๋ก ๋์๊ฐ๋ค.
return color
์ด๋ฏธ์ง ์ถ์ฒ)
"https://www.flaticon.com/free-icons/flow" Flow icons created by Good Ware - Flaticon