์ด๋ถํ์๊ณผ ํ๋ผ๋ฉํธ๋ฆญ ์์น์ ์ฐจ์ด์ ๊ณผ, ์ด๋ ๋์ ์ฌ์ฉํ๋ฉด ์ข์์ง์ ๋ํด์ ๋ช ํํ๊ฒ ์๊ณ ๋์ด๊ฐ ํ์๊ฐ ์๋ค๊ณ ์๊ฐ๋๋ค. ๋งจ ๋ฐ๋ถ๋ถ์ ์ด ๋ฌธ์ ๊ฐ ์ ํ๋ผ๋ฉํธ๋ฆญ ์์น๋ก ํ๋ฆฌ๋์ง์ ๋ํด์ ์๊ฐ์ ์ ์ด๋จ๋ค. ๊ทธ๊ฒ์ ํญ์ ๊ธฐ์ตํ์!
โซ๏ธ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/43238
โซ๏ธ ๋์ ํ์ด
์ด๊ฑฐ ๋ฐ๋ก ์ง์ ์ ํผ ๋ฌธ์ ์ ๋งค์ฐ ๋น์ทํ๊ธฐ ๋๋ฌธ์ ๊ธ๋ฐฉ ํ ์ ์์๋ค. (๋ฐ๋ก ์ด์ ์ ํ์๋ ๋ฌธ์ ์๋ ๋ฐฑ์ค์ ๊ณต์ ๊ธฐ์ค์น)
https://didu-story.tistory.com/434
์ด๋ถํ์์ ๋ฌธ์ ์ ํ์ด ์ด๋ฐ์์ธ๊ฑด๊ฐ? ์์ง ์ฌ์ค ์ด๋ถํ์์ ๋ฌธ์ ์ ํ์ ์๋ฒฝํ๊ฒ ํ์ ํ์ง ๋ชปํ๋ค.
๊ทธ๋ฅ, ์ด๋ถํ์์ผ๋ก ๋ฌธ์ ๊ฐ ๋ถ๋ฅ๋์ด์์ผ๋ ์ด๋ถํ์์ผ๋ก ํ์์๋ฟ ใ ใ
ํ์์ ์งํํ๋ ๋ถ๋ถ์ ์์ด์ ๋ฒ์๊ฐ ํฌ๋ค๋ฉด ์ด๋ถํ์์ ์์ฌ(?)ํด๋ด์ผ๊ฒ ๋ค. (์ด ๋ฌธ์ ๋ ๋ฒ์๊ฐ 10์ต์ด๋ค)
๊ณต์ ๊ธฐ์ค์น ๋ฌธ์ ์์ '๊ฑฐ๋ฆฌ'๋ฅผ ๊ธฐ์ค์ผ๋ก left, right, mid๋ฅผ ์ค์ ํ์๋ค. ์๋ ์ด๋ถํ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋ก๋ idx๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋์ฉ ํ์ํ๋ ๋๋์ด์๋๋ฐ ์ด๋ ๊ฒ '๊ฑฐ๋ฆฌ'๋ '์๊ฐ'์ ๊ธฐ์ค์ผ๋ก left, right๋ฅผ ์ค์ ํด ์ฃผ์ด์ผํ๋ ๋ฌธ์ ๋ค์ด ๋ค์ ์ถ์ ๋๋๋ณด๋ค! ์ตํ๋์.
์ด ๋ฌธ์ ๋ ๊ทธ๋์ , ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ left๋ก ๋๊ณ , ์ต์ ์ ๊ฒฝ์ฐ๋ก right์ ๋์๋ค. ์ฃผ์ด์ง ์์ ๋ก ๋ณด๋ฉด
์ ๊ตญ์ฌ์ฌ๊ฐ ํ์ํ ์ด ์ธ์ n = 6
๊ฐ ์ ๊ตญ์ฌ์ฌ๊ด์ด ์ ๊ตญ์ฌ์ฌ๋ฅผ ํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ times = [7, 10]
์ ๊ตญ์ฌ์ฌ๊ฐ ํ์ํ ์ด์ธ์์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๊ฐ์ฅ ์ต์ ์ ๊ฒฝ์ฐ๋, ๋จ 1๋ถ๋ง ๊ฑธ๋ ค์ ๋ชจ๋ ์ฌ์ฌ๋ฅผ ์๋ฃํ๋ ๊ฒฝ์ฐ์ผ ๊ฒ์ด๋ค. (์ด๋ ๊ฒ ๊ฑฐ๋ฆฌ๋ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ด๋ถํ์์ ์งํํ๋ ๋ฌธ์ ๋ ๋๋ถ๋ถ left๋ 1๋ถํฐ ์์ํ๋ค.
๊ทธ๋ฆฌ๊ณ right๋ ๊ฐ์ฅ ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๋ด๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ต์ ์ ๊ฒฝ์ฐ๋, ๋ชจ๋ ์ฌ๋๋ค์ด ์ ๋ถ 10๋ถ์ด ๊ฑธ๋ฆฌ๋ ์ฌ์ฌ๊ด์๊ฒ ๊ฒ์ฌ๋ฅผ ๋ฐ์์ ์ต์ข ์ ์ผ๋ก 60๋ถ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์ต์ ์ผ ๊ฒ์ด๋ค.
๊ทธ ์ดํ์๋, ์๋์ ๊ฐ์ด ์๊ฐ์ ์ ๊ฐํ ์ ์๋ค.
์ด ๊ฒ์ ๊ทธ๋๋ก ์ฝ๋๋ก ๊ตฌํํ๋ฉด, ์ ๋ต์ ์ฐพ์ ์ ์๋ค.
โซ๏ธ ์ ๋ต์ฝ๋
import Foundation
func solution(_ n:Int, _ times:[Int]) -> Int64 {
var left = 1
var right = times.max()! * n
var answer = 0
while left <= right {
var peopleCnt = 0
let mid = (left + right) / 2
for time in times {
peopleCnt += mid / time
if peopleCnt >= n {
break
}
}
if peopleCnt >= n {
answer = mid
right = mid - 1
} else {
left = mid + 1
}
}
return Int64(answer)
}
print(solution(6, [7, 10])) // return 28
๐ฌ ์ ์ด ๋ฌธ์ ๋ ์ด๋ถํ์์ ์ด์ฉํ ๊น? (ํ๋ผ๋ฉํธ๋ฆญ ์์น?)
์ ํํ๊ฒ ๋งํ๋ฉด ์ด๋ถํ์์ด ์๋๋ค. 'ํ๋ผ๋ฉํธ๋ฆญ ์์น'๋ฐฉ์์ ์ด์ฉํ๋ค.
ํ๋ผ๋ฉํธ๋ฆญ ์์น๋ ๋ญ๊น? ์ด์งํ์๊ณผ ๋น์ทํ๋ฏ ๋ค๋ฅด๋ค. ํ๋ผ๋ฉํธ๋ฆญ ์์น๋, ์ฃผ์ด์ง ์ผ๋ จ์ ๊ฐ๋ค์ด ์๋๋ผ ์ฃผ์ด์ง ๋ฒ์๋ด์์ ์ํ๋ ๊ฐ ๋๋ ์ํ๋ ์กฐ๊ฑด์ ๊ฐ์ฅ ์ผ์นํ๋ ๊ฐ์ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. (์ฅ ๊ทธ๋์ ์ด๊ฒ ์ด์งํ์ ์๋?)
์ด์งํ์: 1๋ถํฐ 9๊น์ง์ '๊ฐ'์ค์์ 3์ด๋ผ๋ ๊ฐ์ ์ฐพ์๋ด๋ ๊ณผ์
ํ๋ผ๋ฉํธ๋ฆญ ์์น: 1๋ถํฐ 9๊น์ง์ ๋ฒ์ ๋ด์์ 3์ ์ฐพ์๋ด๋ ๊ณผ์ .
์ข ์ ๋งคํ์ง๋ง, ์ฆ 1๋ถํฐ 9๊น์ง ๋ชจ๋ ๊ฐ๋ค์ ํ์ํ๋ฉด์ 3์ ์ฐพ์๋ด๋๊ณผ์ ๊ณผ, 1~9 ๋ด๋ถ์ 3์ด ์์ต๋๊น? ๋ฅผ ํตํด 3์ ์ฐพ์๋ด๋ ๊ฒ์ ํ๋ผ๋ฉํธ๋ฆญ ์์น๋ผ๊ณ ํ ์ ์๊ฒ ๋ค. ์ด์ฝํ ์ฑ ์์๋ ๋๋๋น๋์ด ์๋ ค์ฃผ์ ๊ฒ ์ฒ๋ผ, '๊ฒฐ์ ๋ฌธ์ '๋ก ๋ฐ๊พธ์ด์ ํ๊ฒ ๋๋ฉด ๋ฌธ์ ์ ๊ทผ์ด ์ฉ์ดํ๋ค.
ํน์ ์ํฉ์์ ์ต๋/์ต์๊ฐ์ ๋ฌธ์ (=์ต์ ํ๋ฌธ์ )์ธ ๊ฒฝ์ฐ, ๊ทธ๋ฅ ๊ทธ ํน์ ๊ฐ์ด ์ด๋ค ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง๋ง ํ์ธํ๋ฉด ๋๋ ๋ฌธ์ (=๊ฒฐ์ ๋ฌธ์ )๋ผ๊ณ ์๊ฐํด์ ํ์ด๋ณด์.
์ด ๋ฌธ์ ์์ ์์ ๋ฅผ ๋ณด์. ์ด 28๋ถ์ ์๊ฐ๋์, 6๋ช
์ ์ฒ๋ฆฌํด์ผํ๋ค.
28์ 7๋ก ๋๋๋ฉด 4, 10์ผ๋ก ๋๋๋ฉด 2๊ฐ ๋๋ฉด์ 28๋ถ๋์ ์ด 6๋ช
์ ์ฌ๋์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค.
์ฒ์์ ์๊ฐํ๋ค๋ณด๋๊น, 20๋ถ์ 4๋ฒ์งธ ์ฌ๋์ด ์ฌ์ฌ๊ฐ ์๋ฃ๊ฐ ๋๊ณ 10๋ถ์ด ๊ฑธ๋ฆฌ๋ ์ฌ์ฌ๊ด ์๋ฆฌ๊ฐ ๋น์ด์์ ๋, ๋ง์ง๋ง ๋จ์ ํ ์ฌ๋์ 10๋ถ์ง๋ฆฌ ์ฌ์ฌ๊ด์๊ฒ ์ฌ์ฌ๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ์, 1๋ถ์ ๋ ๊ธฐ๋ค๋ ธ๋ค๊ฐ 21๋ถ์ 5๋ฒ์งธ ์ฌ๋์ด ๋์ค๋ฉด ๊ทธ๊ณณ์ผ๋ก ๋ค์ด๊ฐ๋ ๋ฐฉ๋ฒ, ๋๊ฐ์ง์ค ์ ํ์ด ๊ฐ๋ฅํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋ '์ต์'์๊ฐ์ ๋ง์กฑํ๋ ค๋ฉด ํ์๋ฅผ ์ ํํด์ผํ๋ค.
์ด๋ ๊ฒ ๋๋ ์ฒ์์, ์์๋ฅผ ๊ณ ๋ คํด์ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ณง๋ฐ๋ก '์ด๋ถํ์'์ด ๋ ์ค๋ฅด์ง ์์๋ค. ์ ๊ฐ๋ฆผ๊ธธ์ ๋ํด์ ์ด๋ป๊ฒ ์ ํํ๊ฒ ๋์์ค ๊ฒ์ด๋์ ๋ํ ๊ณ ๋ฏผ์ด ์์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง, ์ ๋ต์ ๋ณด๋ฉด ๋จ์ํ ์๊ฐ ๋ด๋ถ์์ ๋ช๋ช ์ ์ฒ๋ฆฌํ๋์ง๊ฐ ์ ์ผ ์ค์ํ๋ค. ์์๋ ์ค์ํ์ง ์๋ค. ์ฃผ์ด์ง ์๊ฐ์ด 28๋ถ์ด๋ผ๋ฉด ๊ทธ๋ฅ 28๋ถ ์ด๋ด์ 6๋ช ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ฐ? ์ด๊ฒ๋ง ํ์ธํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค. ์์์ ๋งํ๋ฏ, '์ฐ๋ฆฌ์๊ฒ ์ฃผ์ด์ง ์๊ฐ์ด ์ด๋งํผ (mid๋งํผ) ์ด๋ผ๋ฉด, 6๋ช ์ด์์ ์ฒ๋ฆฌํ ์ ์๋๊ฐ?'๋ผ๋ ๊ฒฐ์ ๋ฌธ์ ๋ก ์ ๊ทผํ ์ ์๊ฒ ๋ค!