Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (Swift) ์ง•๊ฒ€๋‹ค๋ฆฌ (lv.4, ์ด๋ถ„ํƒ์ƒ‰) (ํ…Œ์ผ€ 2,3 ์‹œ๊ฐ„์ดˆ๊ณผ)

๊ฐ์ž ๐Ÿฅ” 2023. 3. 23. 19:29
๋ฐ˜์‘ํ˜•

โšซ๏ธ ๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/43236?language=swift 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

โšซ๏ธ ๋‚˜์˜ ํ’€์ด

์ด ๋ฌธ์ œ ๋˜ํ•œ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๋ถ„๋ฅ˜๊ฐ€ ๋˜์–ด์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค, ์‹ถ์€ ๊ฐ์ด ์™”๋˜ ๊ฑฐ์ง€ ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์•Œ๊ธฐ ์‰ฝ์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๋จผ์ € ๋ˆˆ์— ๋ณด์ด๋Š”๊ฑด 10์–ต์ด๋ผ๋Š” ์–ด๋งˆ์–ด๋งˆํ•œ ๋ฒ”์œ„. ์ด๊ฒƒ๋งŒ์ด ์ด๋ถ„ํƒ์ƒ‰์ผ ๊ฒƒ์ด๋‹ค ~ ํ•˜๋Š” ๊ฐ?์„ ์ค„ ๋ฟ์ด๋‹ค. 

์ฒ˜์Œ์—๋Š” ์—ญ์‹œ๋‚˜, ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์–ด๋–ค ๊ฒƒ์„ ์ด๋ถ„ํƒ์ƒ‰์˜ ๋Œ€์ƒ์œผ๋กœ ์ฃผ์–ด์•ผํ• ์ง€ ๋„ˆ๋ฌด ๊ณ ๋ฏผ์ด์—ˆ๋‹ค. ์ฒ˜์Œ์— ์ƒ๊ฐํ•œ๊ฑด, ๋Œ์˜ ๊ฐ„๊ฒฉ์˜ ์ตœ์†Œ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Œ์˜ ๊ฐ„๊ฒฉ์„ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ left ์™€ right๋กœ ๋‘๊ณ  ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿผ.. ๋Œ์€ ๋ญ ์–ด์ผ€ ์‚ญ์ œํ•จ? ์‚ญ์ œํ•œ ๋Œ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ„๊ฒฉ์„ ์ƒ๊ฐํ•ด์•ผํ•˜๋Š”๋ฐ ๊ทธ๊ฑฐ ์–ด๋–ป๊ฒŒ ์ ์šฉ์‹œํ‚ฌ๊ฑด๋ฐ1?!!? 

์šฐ๋ฆฌ๊ฐ€ ๋Œ์˜ ๊ฐ„๊ฒฉ์„ ๊ณ ๋ คํ•ด์„œ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์„ ๋•Œ ๋˜ํ•˜๋‚˜์˜ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค. '๋Œ์ด ์‚ญ์ œ๋˜๋Š” ๊ฐœ์ˆ˜!'์ด๋‹ค. ์ฃผ์–ด์ง„ n๊ฐœ๋งŒํผ๋งŒ ์‚ญ์ œ๋˜์–ด์•ผํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์„ ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

์˜ˆ๋ฅผ๋“ค์–ด, ๋Œ์ด ์‚ญ์ œ๋œ ๊ฐœ์ˆ˜๊ฐ€ n๊ฐœ ์ด์ƒ์ด๋ฉด?? → ๋„ˆ๋ฌด ๋งŽ์ด ์‚ญ์ œ๋œ๊ฑฐ์•ผ! → ์‚ญ์ œ ๋˜๋Š” ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผํ•˜์ง€?

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค... ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ์ƒ๊ฐ์ด ๋ง‰ํ˜”๋‹ค. ์–ด๋–ค ์กฐ๊ฑด์„ ์ฃผ์—ˆ๊ธธ๋ž˜ ๋Œ์ด ๋งŽ์ด ์‚ญ์ œ๋˜๋Š”๊ฑฐ์ง€ ? ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ๊ทธ๋‹ˆ๊นŒ ๋Œ์€ ์™œ ๋ฌด์Šจ์กฐ๊ฑด๋•Œ๋ฌธ์— ์‚ญ์ œ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋˜๋Š”๊ฑด๋ฐ!! ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ์ฑ…์€ ๋ณด์ด์ง€ ์•Š์•˜๋‹ค. ใ…‹ใ…Žใ…‹ใ…Ž... ํ•˜ ์—ฌ๋ ต๊ณ ๋งŒ

์ธํ„ฐ๋„ท์„ ์‚ด์ง ์ฐธ๊ณ ํ–ˆ๋‹ค. ์ฐธ๊ณ ํ•˜๋ฉด์„œ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์˜ ์ƒ๊ฐ์ „๊ฐœ๋ฐฉ์‹์ด ๋‚ด ์ƒ๊ฐ๊ณผ ์กฐ๊ธˆ? ๋น„์Šทํ–ˆ๊ณ  ์ž์„ธํžˆ ์จ์ฃผ์…”์„œ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐ์„ ํ๋ฅด๊ฒŒ ํ•ด์•ผํ• ์ง€ ์กฐ๊ธˆ ๊ฐ์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

https://velog.io/@cgw0519/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A7%95%EA%B2%80%EB%8B%A4%EB%A6%AC

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ง•๊ฒ€๋‹ค๋ฆฌ

์˜ค๋Š˜๋„ ์–ด์ œ ํ’€์—ˆ์ง€๋งŒ ํ•˜๋ฃจ ๋ฏธ๋ฃฌ ํฌ์ŠคํŒ…์ž„๋‹ˆ๋„ \~~์ด๋ฒˆ ๋ฌธ์ œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณ ๋“์  kit ์ด๋ถ„ํƒ์ƒ‰ ๋ถ„๋ฅ˜์— ์žˆ๋Š” level4 ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค ! ์ด๋ถ„ํƒ์ƒ‰ ๋ฌธ์ œ๋Š” ๋‹ค ์žฌ๋ฐŒ๋Š” ๊ณ  ๊ฐ™๋‹ค.. ์•Œ๊ณจ ๋ฌธ์ œํ’€์ด ๋ ˆํฌ ๋ณด๋‹ˆ

velog.io

 

์Œ, ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด๋ณด์ž. ์šฐ์„  left, right, mid๊ฐ€ ๋ฉ€ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž˜ ์•Œ์•„์•ผํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด๋ถ„ํƒ์ƒ‰์„ ํ•˜๋ฉด์„œ ๊ตฌํ•˜๋ ค๋Š” ๊ฐ’์€ mid ์ด๋‹ค.  ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” mid ๊ฐ’์„ ๊ตฌํ•˜๋Š”๊ฒƒ! ์ด๊ฒƒ์„ ์ž๊พธ ๊นŒ๋จน์–ด์„œ,,, ์ƒ๊ฐํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์•˜๋‹ค.  ์ดˆ๋ฐ˜์— ์ƒ๊ฐํ•œ๊ฒƒ ์ฒ˜๋Ÿผ, ๋Œ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ left์™€ right์œผ๋กœ ๋‘๋ฉด, mid๊ฐ’์ด ํƒ€๊ฒŸ๊ฐ’์ด ๋˜์—ˆ์„๋•Œ! ์šฐ๋ฆฌ๋Š” ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ฐ€์žฅ ํฐ ๋ฒ”์œ„์˜ distance ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ right๋กœ ๋‘๊ณ , ๊ฐ€์žฅ ์ ์€ distance๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ left๋กœ ๋‘๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ๊ทธ๋ฆฌ๊ณ  mid๋Š” (left + right) / 2 ํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

๊ทธ๋Ÿผ, ํ˜„์žฌ ์ƒํƒœ์—์„œ๋Š” ๋Œ์„ 2๊ฐœ๋งŒ ์‚ญ์ œํ•ด์„œ, ๋Œ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Œ๊ฐ€ 12๊ฐ€ ๋˜์–ด์•ผํ•œ๋‹ค. ๋Œ๋“ค์„ ๋Œ์•„๋ณด๋ฉด์„œ ํŒ๋‹จํ•ด๋ณด๋ฉด, 

1. ์ฒซ๋ฒˆ์งธ 2๋ฒˆ๋Œ → ๊ฐ„๊ฒฉ์€ 0~2๋‹ˆ๊นŒ 2 → 2๋Š” mid์ธ 12๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, 12๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋  ์ˆ˜ ์—†์Œ → ์‚ญ์ œ๋œ ๋Œ์ผ ๊ฒƒ์ด์•ผ
2. ๋‘๋ฒˆ์งธ 11๋ฒˆ๋Œ → ๊ฐ„๊ฒฉ์€ 0 ~ 11๋‹ˆ๊นŒ 11 (2๋ฒˆ๋Œ์€ ์‚ญ์ œ๋˜์–ด์„œ ์—†๋‹ค.) → 11์€ mid์ธ 12๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, 12๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋  ์ˆ˜ ์—†์Œ → ์‚ญ์ œ๋œ ๋Œ์ผ ๊ฒƒ์ด๋ž€ ๋ง์ด๋‹ค
3. ์„ธ๋ฒˆ์งธ 14๋ฒˆ๋Œ → ๊ฐ„๊ฒฉ์€ 0~14๋‹ˆ๊นŒ 14 (2,12๋ฒˆ์€ ์‚ญ์ œ) → 14๋Š” mid์ธ 12๋ณด๋‹ค ํฌ๋ฏ€๋กœ, 12๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ → ์ด๋Œ์€ ์‚ด๋ ค
4. ๋„ค๋ฒˆ์งธ 21๋ฒˆ๋Œ→ ๊ฐ„๊ฒฉ์€ 14 ~ 21๋‹ˆ๊นŒ 7 → 7 < 12 → ์ด ๋Œ๋„ ์ฃฝ์—ฌ์•ผํ•ด
....... ๐Ÿ” ๋ฐ˜๋ณต

์ด๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์ด๋ถ„ํƒ์ƒ‰์€, mid ๊ฐ€ ์ผ๋‹จ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๋‹ต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ๊ทธ๋‹ค์Œ ํ•ด๋ฅผ ๊ตฌํ•ด๋ณด๊ณ  ๊ทธ ํ•ด๊ฐ€ ๋‚ด๊ฐ€์›ํ•˜๋Š” ํ•ด๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด? ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ฏธ๋ฆฌ์ •ํ•ด์ง„ ๋‹ต์„ ์„ค์ •ํ•œ๋‹ค.๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ํ˜„์žฌ ์ด๊ฒƒ๋„ mid์ธ 12๊ฐ€ ์ตœ์†Œ์ผ๊ฑฐ์•ผ! ํ•˜๊ณ  ์„ค์ •ํ•ด๋‘๊ณ , 12๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฐ’๋“ค์€ ์—†๋Š” ๋Œ์ผ๊ฑฐ์•ผ~ ํ•˜๊ณ  ๋Œ๋“ค์„ ์‚ญ์ œํ–ˆ๋‹ค. ๊ฒฐ๊ตญ n๋ณด๋‹ค ๋งŽ์€ ๋Œ๋“ค์ด ์‚ญ์ œ๋๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด 12๋Š” ๋‹ต์ด ์•„๋‹ˆ๋ผ๋Š” ๋œป์ด ๋œ๋‹ค.

๊ทธ๋Ÿผ,,, left ~ mid ์™€ mid~right ๋ฅผ ์„ค์ •ํ•˜๋Š” ์กฐ๊ฑด์€ ์–ด๋–ป๊ฒŒ์ค„๊นŒ? ์ด๊ฑด ์‚ญ์ œ๋œ ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ณด์ž. ์œ„์˜ ๊ฒฝ์šฐ์—์„œ ์‚ญ์ œ๋˜์–ด์•ผํ•˜๋Š” ๋Œ , ์ฆ‰ ์ฃผ์–ด์ง„ n์€ 2์ธ๋ฐ, ํ˜„์žฌ 2๊ฐœ ์ด์ƒ์˜ ๋Œ์ด ์‚ญ์ œ๋œ ์ƒํƒœ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ตœ์†Œ๊ฐ„๊ฒฉ 12๋ฅผ ์ค„์—ฌ์•ผ ์‚ญ์ œ๋˜๋Š” ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

mid = (left + right) / 2๋กœ ์„ค์ •๋˜์–ด์žˆ์œผ๋‹ˆ, mid๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” right๋ฅผ left์ชฝ์œผ๋กœ ๋Œ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€? ๊ทธ๋Ÿผ right๋ฅผ mid - 1๋กœ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

์•„๋ž˜ ๋…ธํŠธ๋Š” ์œ„์˜ ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ณ  ์ƒ๊ฐํ•ด๋‚ธ ์•„์ดํŒจ๋“œ์—์„œ ๋„์ ์—ฌ๋†“์€ ๋…ธํŠธ์ด๋‹ค...

 

โšซ๏ธ ์ž ๊ทธ๋Ÿผ ์ด๊ฒƒ์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด์„œ ์ œ์ถœํ•ด๋ณด์ž

import Foundation

func solution(_ distance:Int, _ rocks:[Int], _ n:Int) -> Int {
    var rocks = rocks
    rocks.append(0)
    rocks.append(distance)
    rocks.sort()

    var left = 0
    var right = distance
    var answer = 0

    while left <= right {
        let mid = (left + right) / 2
        var preRock = rocks[0]
        var removeRock = 0
        var minDistance = 1000000001

        for i in 1..<rocks.count {
            if rocks[i] - preRock < mid {
                removeRock += 1
            } else {
                minDistance = min(rocks[i] - preRock, minDistance)
                preRock = rocks[i]
            }
        }

        if n >= removeRock {
            answer = minDistance
            left = mid + 1
        } else {
            right = mid - 1
        }
    }

    return answer
}

์ญ? ํ…Œ์ผ€ 2,3, ์‹œ๊ฐ„์ดˆ๊ณผ???? 

 

ํ’€์ด๋ฐฉ๋ฒ•์€ ํ‹€๋ฆฐ๊ฒŒ ์—†๋‹ค๊ณ  ํ™•์‹ ํ•˜์—ฌ sort๋˜๋Š” ๋ถ€๋ถ„์„ ์œ ์‹ฌํžˆ ๋ดค๋‹ค. ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜ (์ด๋ถ„ํƒ์ƒ‰)์„ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— sortํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆด ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. 

์—ฌ๊ธฐ์„œ ์“ธ๋ฐ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. sort๋ฅผ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ”๊ฟ”์•ผํ•˜๋‚˜? nlogn์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ”์•ผํ•˜๋‚˜? ์‹ถ์—ˆ๋Š”๋ฐ, ์•„๋‹Œ๊ฒƒ ๊ฐ™์•˜๊ณ , ๋‚ด๊ฐ€ append ๋กœ 0๊ณผ distance๋ฅผ ๋” ๋„ฃ์–ด์คŒ์œผ๋กœ์จ sortํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์‚ฌ์‹ค ์• ์ดˆ์— left์™€ right๋Š” ๊ทธ๋ƒฅ 0๊ณผ distance ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๊ณ , ๊ตณ์ด rocks์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. rocks์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์คŒ์œผ๋กœ์จ ๋งŒ์•ฝ rocks์˜ ๋ฐฐ์—ด์ด ์•„์ฃผ ํฌ๊ฒŒ ๋“ค์–ด์˜ค๊ฒŒ ๋์„๋•Œ, ๋‘๊ฐœ์˜ ๊ฐ’์„ ๋” ์ถ”๊ฐ€ํ•ด์คŒ์œผ๋กœ์จ, ์ •๋ ฌํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด n๋ฒˆ ๋” ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์ดˆ๊ณผํ•˜์ง€ ์•Š์•˜์„๊นŒ? 

์—ญ์‹œ๋‚˜! ์ด๊ฑฐ ๊ณ ์น˜๋‹ˆ๊นŒ ํ•ด๊ฒฐ์™„๋ฃŒ ๋˜๋Š”๊ตฐ

 

โšซ๏ธ ์ •๋‹ต์ฝ”๋“œ

import Foundation

func solution(_ distance:Int, _ rocks:[Int], _ n:Int) -> Int {
    let rocks = rocks.sorted()
    var left = 0
    var right = distance
    var answer = 0

    while left <= right {
        let mid = (left + right) / 2
        var preRock = 0
        var removeRock = 0
        var minDistance = 1000000001

        for rock in rocks {
            if rock - preRock < mid {
                removeRock += 1
            } else {
                minDistance = min(rock - preRock, minDistance)
                preRock = rock
            }
        }

        if n >= removeRock {
            answer = minDistance
            left = mid + 1
        } else {
            right = mid - 1
        }
    }

    return answer
}

 

 

์ž, ์ด์ œ ์•ž์œผ๋กœ ์ด๋ถ„ํƒ์ƒ‰ ๋ฌธ์ œ๋ฅผ ํ’€๋•Œ ๊ธฐ์–ตํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์ด๊ฒƒ์ด๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๊ตฌํ•˜๋ ค๊ณ  ํ•˜๋Š” mid ํƒ€๊ฒŸ๊ฐ’์€ 'ํ•ด'์ด๊ณ , ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋กœ ์ด ํ•ด๊ฐ€ ๋งž๋Š”์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•œ๋‹ค. mid๊ฐ€ ํ•ด ๋ผ๋Š”๊ฒƒ์„ ์žŠ์ง€ ๋ง์ž! 

๋ฐ˜์‘ํ˜•