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

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1300๋ฒˆ - K๋ฒˆ์งธ ์ˆ˜ (๊ณจ๋“œ2) ์ด๋ถ„ํƒ์ƒ‰ ๋ฒ”์œ„์„ค์ •.. ์–ด์บ„?

๊ฐ์ž ๐Ÿฅ” 2023. 3. 24. 02:39
๋ฐ˜์‘ํ˜•

๋ฌด๋ ค ๊ณจ๋“œ2๋ผ์„œ ์—„์ฒญ ๊ฒ๋จน์—ˆ๋˜ ๋ฌธ์ œ...
์—„์ฒญ ์–ด๋ ค์› ๋‹ค๊ธฐ๋ณด๋‹ค๋Š”, ๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ๊ทธ๊ฒƒ์„ ํ•ด์„ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€๊ฐ€ ์–ด๋ ค์› ๋‹ค. ๋„๊ฒƒ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋ฐ”๋กœ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ?
ํ•˜์ง€๋งŒ, ์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๊ถ๊ธˆํ•œ์ ์ด ์ƒ๊ฒผ๋‹ค. ๊ฒฐ๊ณผ๊ฐ’์„ ์™œ ๋‹ค ์ฐ์–ด๋ด๋„ ๋ชจ๋ฅด๊ฒ ์ง€?

 

โšซ๏ธ ๋ฌธ์ œ

https://www.acmicpc.net/problem/1300

 

1300๋ฒˆ: K๋ฒˆ์งธ ์ˆ˜

์„ธ์ค€์ด๋Š” ํฌ๊ธฐ๊ฐ€ N×N์ธ ๋ฐฐ์—ด A๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜ A[i][j] = i×j ์ด๋‹ค. ์ด ์ˆ˜๋ฅผ ์ผ์ฐจ์› ๋ฐฐ์—ด B์— ๋„ฃ์œผ๋ฉด B์˜ ํฌ๊ธฐ๋Š” N×N์ด ๋œ๋‹ค. B๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, B[k]๋ฅผ ๊ตฌํ•ด๋ณด์ž. ๋ฐฐ์—ด A์™€ B

www.acmicpc.net

 

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

์ฒ˜์Œ์— ๋ณด์ž๋งˆ์ž ์—ฅ ์ด๊ฒŒ ์™œ ๊ณจ๋“œ? ์‹ถ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋Š” ์ˆœ๊ฐ„ ์กฐ๊ฑด์„ ๋ดค๋Š”๋ฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ 100์–ตใ…‡์ด ๋‚˜์˜ค๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€!! ๊ทธ๋ ‡๋‹ค๋ฉด... O(N^2) ์™„ํƒ์œผ๋กœ๋Š” ํ’€์ˆœ ์—†๋‹ค๋Š” ๋œป์ธ๋ฐ!!

์ฒ˜์Œ ์ƒ๊ฐํ•œ ํ’€์ด๋Š”, i*j๋ฅผ ๋ชจ๋‘ ๊ณ„์‚ฐํ•œ list๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ 

๊ทธ๋ ‡๋‹ค๋ฉด, ๋ฐฐ์—ด B์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 100์–ต์ด ๋‚˜์˜จ๋‹ค. ๋ชจ๋‘ ๊ตฌํ•ด์„œ ๋ฐฐ์—ด B๋ฅผ ๋งŒ๋“œ๋Š”๊ฒƒ์€... ๋ฌด์กฐ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด? ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์ด๋ถ„ํƒ์ƒ‰์„ ์ด์šฉํ•ด์„œ B[K]๋ฅผ ์ฐพ์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค! ๋„๋Œ€์ฒด ๋ฌด์Šจ ์–ด๋–ป๊ฒŒ ์ด๊ฑธ ์–ด์บ„? ์–ด์บ„ ์–ด์บ„์–ด์ผ€๊ตฌํ•จ????? 

๋„์ €ํžˆ ๊ฐ์ด ์˜ค์ง€ ์•Š์•˜๋‹ค. ... ๊ทธ๋ ‡๊ฒŒ ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ฆฌ๋‹ค๊ฐ€ ์ƒ๊ฐํ•ด๋‚ธ๊ฑด...

์ฐพ์•„๋‚ธ ๊ทœ์น™์ค‘ ํ•˜๋‚˜๋Š”,,, ์ด๋ ‡๊ฒŒ ์ž…๋ ฅ๋œ 2์ฐจ์› ๋ฐฐ์—ด A์˜ ๊ฐ’๋“ค์€ i*j๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๋นจ๊ฐ„์„ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’์ด ๋™์ผํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค... ์ด๊ฒƒ์„ ์ข€ ์ด์šฉํ•ด์„œ ํƒ์ƒ‰ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ด๋ฉด ์•ˆ๋˜๋ ค๋‚˜?? ์‹ถ์—ˆ์œผ๋‚˜.... ์ ˆ๋ฐ˜์œผ๋กœ ํƒ์ƒ‰๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๋„ 50์–ต์ด๋‹ค.ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ด๊ฒƒ๋„ ์งค!

ใ…‡์œผ์•„์•„์•„์•„์•„ ๊ทธ๋Ÿผ ์–ด์ผ€ํ•œ๋‹ค๋Š”๊ฑฐ์•ผ ์–ด์ผ€ํ•œ๋‹ค๋Š”๊ฑฐ์•ผ ๋„˜์–ด๋ ค์›Œ .... ๊ทธ๋Ÿฌ๋˜ ์™€์ค‘ ์ด๋ถ„ํƒ์ƒ‰์˜ ๋Œ€์ƒ์„ ๋จผ์ € ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์„ ์ •๋ฆฌํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  left์™€ right๋ฅผ ์„ค์ •ํ•ด๋ณด๊ณ , mid๋ฅผ ์„ค์ •ํ•ด๋ณด์•˜๋‹ค. ๋ฐ”๋กœ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ (programmers ์ง•๊ฒ€๋‹ค๋ฆฌ) mid์˜ ์˜๋ฏธ๋ฅผ ๊ธฐ์–ตํ•˜๋ฉฐ ๋Œ€์ƒ์„ ์ฐพ์ž๊ณ  ๋‹ค์งํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด๋‚ธ๊ฒŒ ๋ฐ”๋กœ ์ด๊ฒƒ!

์šฐ์„ , ๊ฒฐ๊ณผ๊ฐ’์ธ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ตœ์†Œ๊ฐ’์€ 1 ์ผ๊ฒƒ์ด๊ณ , ์ตœ๋Œ€๊ฐ’์€ ์ฃผ์–ด์ง„ N์˜ ์ œ๊ณฑ์ธ 9์ผ ๊ฒƒ์ด๋‹ค. (๋ฐฑ์ค€ ์˜ˆ์ œ 1 ๊ธฐ์ค€) ์™œ๋ƒ๋ฉด??? ์šฐ๋ฆฌ๋Š” B๋ฐฐ์—ด ๋‚ด๋ถ€์— i*j์˜ ๊ฐ’๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€๋กœ N*N์ด๋ผ๋Š” ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ๋ž˜์„œ left๋ฅผ1 right๋ฅผ 9๋กœ ์„ค์ •ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค๋ฉด, mid๊ฐ€ 5๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋ฌธ์ œ์˜ ์ถœ๋ ฅ ์กฐ๊ฑด์ด '์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ–‡์„๋•Œ B[k]'๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, K๋ฒˆ์งธ์˜ ์ˆ˜๊ฐ€ ๋ญ๋ƒ? ๋ผ๋Š” ๋œป์ธ๋ฐ, ์—ฌ๊ธฐ์„œ ์ด K๋ฒˆ์จฐ์— ์žˆ๋Š” ์ˆ˜๊ฐ€ mid๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

(์—ฌ๊ธฐ ์ƒ๊ฐํ•ด๋‚ด๋Š”๊ฒŒ ์ข€ ์–ด๋ ค์› ์Œ ใ… ใ…  ) ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ๋ ‡๋‹ค๋ฉด! k๋ฒˆ์งธ์ˆ˜๊ฐ€ 5์ด๊ธฐ ์œ„ํ•ด์„œ๋Š”, 5์•ž์— 5๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€์ˆ˜๊ฐ€ K-1๊ฐœ ์žˆ์–ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ 5์•ž์— K-1๋ณด๋‹ค ๋งŽ์€ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ˜„์žฌ 5๋Š” K๋ฒˆ์งธ๋ณด๋‹ค ํ›จ์”ฌ ๋’ค์— ์žˆ๋Š” ์ˆ˜๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ž์— ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ์ค˜์•ผํ•œ๋‹ค. ๊ทธ๋Ÿผ right๋ฅผ mid - 1๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋˜๊ฒ ์ง€? ๋ฐ˜๋Œ€๋กœ ๋งŒ์•ฝ 5์•ž์— k-1๋งŒํผ์˜ ์ˆ˜ ํ˜น์€ ๊ทธ๊ฑฐ๋ณด๋‹ค ์ž‘์€์ˆ˜๋งŒํผ ์žˆ๋”ฐ๋ฉด? K๋ฒˆ์งธ๋ณด๋‹ค ์•ž์— ์žˆ๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์—, ์•ž์˜ ๋ฒ”์œ„๋ฅผ ๋Š˜๋ ค์ฃผ์–ด์•ผํ•œ๋‹ค. ๊ทธ๋Ÿผ left = mid + 1๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค! 

โš ๏ธ ์•„๋‹ˆ ์—ฌ๊ธฐ์„œ, ๋ฒ”์œ„๋ฅผ ์–ด์ผ€ ์žก๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์™€์„œ ๋ฏธ์น  ์ง€๊ฒฝ์ด๋‹ค.

์ฒ˜์Œ์— ์ž‘์„ฑํ•œ ๋ฒ”์œ„๋Š” ์ด๋žฌ๋‹ค. ๊ทผ๋ฐ ๋‹ต์ด 6์ด ์•„๋‹ˆ๋ผ 5๊ฐ€ ๋‚˜์˜ค๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€!!

// (1)๋ฒˆ โŒ ํ‹€๋ฆฐ ์ฝ”๋“œ 
if minCount > k  {
    right = mid - 1
} else {
    answer = mid
    left = mid + 1
}

๊ทผ๋ฐ ๋˜ ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ์ •๋‹ต์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

// (2)๋ฒˆ โœ… ์ •๋‹ต์ฝ”๋“œ
if minCount < k {
    left = mid + 1
} else {
    answer = mid
    right = mid - 1
}

 

์ง„์งœ ๋„๋Œ€์ฒด ์™œ minCount >= k ์ผ๋•Œ anwer=mid๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด์•ผํ•˜๋Š”๊ฑฐ์ง€? ์‹ถ์—ˆ๋‹ค. ์ง„์งœ ๋„์ €ํžˆ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜๋Š”๋ฐ,,,, ์ด์ œ ... ์ดํ•ด๊ฐ€ ๋˜์–ด์„œ ์„ค๋ช…ํ•ด๋ณด๋ ค๊ณ ํ•œ๋‹ค. (๋ชจ๋“  ๋ธ”๋กœ๊ทธ๊ฐ€ ์„ค๋ช…ํ•ด์ฃผ์ง€ ์•Š์•„์„œ ๋ฝ€๋ก์œผ๋กœ ๊ฑ ๋งž์ถ”๋Š”๊ฑด๊ฐ€ ์‹ถ์—ˆ์Œ ;;)

์ž ์˜ˆ์ œ1์—์„œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด B๋ฅผ ๋ณด์ž.

์ด๋ ‡๊ฒŒ, ๋ชจ๋“  ์ˆ˜๊ฐ€ ๋‹ค๋ฅด์ง€ ์•Š๊ณ  ์ค‘๋ณต๋˜๋Š” ์ˆ˜๋„ ์ƒ๊ธด๋‹ค. ์šฐ๋ฆฌ๋Š” ๋…ธ๋ž€์ƒ‰ ์ธ๋ฑ์Šค 7๋ฒˆ์— ์žˆ๋Š” 6์„ ์ฐพ์•„๋‚ด๊ณ  ์‹ถ์€๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์–ด์ผ€ ๋น„๊ตํ•ด์„œ mid๊ฐ€ 6์ด ๋‚˜์™”๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์ž. 

ํ˜„์žฌ ์ด ์ƒํ™ฉ์—์„œ ๋…ธ๋ž€์ƒ‰ ๋ถ€๋ถ„ 6์ด K = 7๋ฒˆ ์งธ ์ •๋‹ต์ด๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋ถ„ํƒ์ƒ‰์˜ ํŠน์ง•์„ ์ž˜ ๊ธฐ์–ตํ•ด๋ณด๋ฉด ์ด๋ถ„ํƒ์ƒ‰์€ '์ •ํ™•ํ•œ!!!!'์ •๋‹ต์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. (๋ญ,,, ๊ทธ๋Ÿผ ์ž˜ ๋งž์ถœ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ ๋˜๊ฒ ์ง€?) ์–ด์จŒ๋“ , ์œ„์˜ if ๋ฌธ์„ ๋ณด๋ฉด, minCount๊ฐ€ 7๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด answer = mid๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. minCount๋Š” ์ง€๊ธˆ mid์ธ ์ˆ˜ '6'๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜ ์˜ ๊ฐฏ์ˆ˜๋ฅผ countํ•œ๋‹ค. ๊ทธ๋Ÿผ?? K=8 ์œ„์น˜์— ์žˆ๋Š” ๊ฐ’๋„ 6์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์ด count ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ง€๊ธˆ ํ˜„์žฌ minCount๋Š” 8์ผ ๊ฒƒ์ด๋‹ค. 

ํ”„๋ฆฐํŠธ ํ•ด๋ณธ ๊ฒฐ๊ณผ, minCount๋Š” 8์ด ๋‚˜์˜จ๋‹ค.

๋งŒ์•ฝ ์—ฌ๊ธฐ์„œ ์กฐ๊ฑด์ด (1)๋ฒˆ โŒ ํ‹€๋ฆฐ์ฝ”๋“œ ๋ฒ”์œ„์ฒ˜๋Ÿผ ์„ค์ •์ด ๋˜์–ด์žˆ๋”ฐ๋ฉด, 8>7 ์ด๊ธฐ ๋•Œ๋ฌธ์— answer ์— 6์ด ์ €์žฅ๋˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ minCount >= k ์ธ (2)๋ฒˆ โœ… ์ •๋‹ต์ฝ”๋“œ ๋ฒ”์œ„๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค!! ! 

์ด๋ ‡๊ฒŒ ์ด๋ถ„ํƒ์ƒ‰์—์„œ๋Š” ์˜ˆ์ œ๋ฅผ ์ž˜ ๋ณด๊ณ  ๋ชจ๋“  ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๊ณ , mid๊ฐ’์„ ์ฃผ๋Š” ๋ฒ”์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ฃผ์–ด์•ผํ•˜๋Š”์ง€ ๊นŒ์ง€๋„ ์ž˜ ๊ณ ๋ฏผ์ด ๋˜์–ด์•ผ ๋งž์ถœ์ˆ˜ ์žˆ๋‹ค. ๐Ÿค”๐Ÿค”๐Ÿค”๐Ÿค” ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ถ„ํƒ์ƒ‰ ๋ฌธ์ œ๋Š” ์•„์ง ๋‚˜์—๊ฒŒ ๋”๋” ์–ด๋ ต๊ฒŒ ๋Š๊ปด์ง„๋‹ค!

๐Ÿค” ๊ทธ๋ฆฌ๊ณ  ๋˜ ์—ฌ๊ธฐ์„œ, mid๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋Š” ์–ด์ผ€ ๊ตฌํ–ˆ๋ƒ๊ณ ?

์ด๊ฒƒ์€... ๋‚˜๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์ธํ„ฐ๋„ท์„ ์ฐธ๊ณ ํ–ˆ๋‹ค ใ… ใ…  ๋„์ €ํžˆ for ๋ฌธ์œผ๋กœ ์™„ํƒ ๋Œ๋ฆฌ๋Š”๊ฒƒ ๋ง๊ณ ๋Š” ์ƒ๊ฐ์ด ์•ˆ๋‚ฌ๋‹ค.... ๊ทผ๋ฐ ์—ญ์‹œ๋‚˜,, ์ˆ˜ํ•™์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋…ธ๋ จํ•จ์ด ํ•„์š”ํ–ˆ๋‹ค.

for i in 1..<n+1 {
    minCount += min(mid / i, n)
}

์ด๊ฒŒ ๋ฌด์Šจ ์˜๋ฏธ๋ƒ??!?!?  ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด์ž... (์•„ ์ด๋Ÿฐ ์ˆ˜ํ•™์ ์ธ ์ ‘๊ทผ ์–ด์ผ€ ... ๊ตฌํ•˜๋Š”๊ฑฐ์•ผ ใ… ใ…  ์ง„์งœ ๋ฌธ์ œ ๋งŽ์ด ํ’€์–ด๋ณด๋Š”๊ฒŒ ๋‹ต์ด๋‹ค.. ) 

์™€์šฐ ... ๊ทธ๋ƒฅ ๊ฐ„๋‹จํ•œ๊ฒŒ i*j ๋ฅผ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ฐ„๋‹จํ•œ ์ˆ˜ํ•™์‹์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  , ๋ช…ํ™•ํ•œ ์ฒ˜๋ฆด๋ฅด ์œ„ํ•ด min ์ฒ˜๋ฆฌ๊นŒ์ง€ ํ•ด์ฃผ๋Š” ์ €... ๋Œ€๋‹จํ•จ...! ์ด๋ ‡๊ฒŒ i*j์ค‘ ํ˜„์žฌ mid๋ณด๋‹ค ์ž‘์€์ˆ˜๊ฐ€ ๋ช‡๊ฐ ์ง€ ๊ตฌํ•  ์ˆ˜ ์žˆ๋”ฐ. ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด ํ–‰๋งŒํผ๋งŒ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— 10๋งŒ๋ฒˆ ๋Œ์•„๊ฐˆ ๊ฒƒ์ด๊ณ , O(100000)์ด ๋  ๊ฒƒ์ด๋‹ค.

 

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

import Foundation

let n = Int(readLine()!)!
let k = Int(readLine()!)!

private func solution() {
    var left = 0
    var right = k
    var answer = 0

    while left <= right {
        let mid = (left + right) / 2
        var minCount = 0

        for i in 1..<n+1 {
            minCount += min(mid / i, n)
        }

        if minCount < k {
            left = mid + 1
        } else {
            answer = mid
            right = mid - 1
        }
    }

    print(answer)
}

solution()

 

 

๋ฐ˜์‘ํ˜•