๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ˜ | Gold

[Kotlin, G1] ๋ฐฑ์ค€ 1300๋ฒˆ K๋ฒˆ์งธ ์ˆ˜

by immgga 2024. 9. 9.

์ถœ์ฒ˜: unsplash.com

 

K๋ฒˆ์งธ ์ˆ˜(1300๋ฒˆ)

Gold 1

#์ด๋ถ„ ํƒ์ƒ‰ #๋งค๊ฐœ ๋ณ€์ˆ˜ ํƒ์ƒ‰

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

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

๋ฌธ์ œ ์ž์ฒด๋Š” ์ดํ•ดํ•˜๋Š” ๋ฐ ์–ด๋ ต์ง€ ์•Š๋‹ค.

๋ฐฐ์—ด์˜ index๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. ๊ฐ ๋ฐฐ์—ด์— ๋“ค์–ด ์žˆ๋Š” ์ˆ˜๋“ค์€ ๊ฐ index์˜ ๊ณฑ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์‚ฌ์ง„ 1-1

์œ„ ํ‘œ์—๋Š” 5 * 5 ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์— ๋“ค์–ด๊ฐˆ ์ˆ˜๋“ค์„ ๋‚˜์—ดํ•ด ๋†จ๋‹ค.

๊ฐ index์˜ ๊ณฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

๋ชจ๋“  ๊ฐ’๋“ค์€ ๊ฐ ์ค„์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์ˆ˜๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

1๋ฒˆ์งธ ์ค„์€ 1์˜ ๋ฐฐ์ˆ˜, 2๋ฒˆ์งธ ์ค„์€ 2์˜ ๋ฐฐ์ˆ˜ ... 5๋ฒˆ์งธ ์ค„์€ 5์˜ ๋ฐฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

์ž…๋ ฅ ์˜ˆ์ œ์—์„œ๋Š” 3 * 3์˜ 2์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฐ’๋“ค์„ ์ •๋ ฌํ–ˆ์„ ๋•Œ, 7๋ฒˆ์งธ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค.

์šฐ์„  ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•ด ๋ณด๋ฉด 1, 2, 2, 3, 3, 4, 6, 6, 9์˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์ด ์ค‘ 7๋ฒˆ์งธ ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ 6์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฐ’์ด 7๋ฒˆ์งธ ๊ฐ’์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  B[7] = 6์ด๊ธฐ ๋•Œ๋ฌธ์— 6๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋“ค์ด 7๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด ๋œ๋‹ค.

์ •๋‹ต์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด B[k] = T์—์„œ T์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ๊ฐ€๋ฉด์„œ ์ •๋‹ต์„ ์ฐพ์•„๊ฐ€์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด T์— ๋งž๋Š” k์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ•ด์•ผ ํ• ๊นŒ?

๋จผ์ € ์œ„์˜ ํ‘œ์—์„œ 7๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ผ์ธ๋ณ„๋กœ ๊ตฌํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์‚ฌ์ง„ 1-2

๋ฌผ๋ก  ์ผ์ผ์ด ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ๋” ๋น ๋ฅด๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

7 / ๋ผ์ธ์„ ํ•ด์ฃผ๋ฉด 7๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 2๋ฒˆ์งธ ์ค„์˜ ๊ฐœ์ˆ˜๋Š” 7 / 2์—์„œ ์†Œ์ˆ˜์ ์„ ๋ฒ„๋ฆฐ 3์ด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์‚ฌํ•ญ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ ๋‚˜๋ˆˆ ๋ชซ์ด 5๋ณด๋‹ค ์ปค์ง€๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ๋ชซ์ด 5๋ณด๋‹ค ์ปค์ง€๋ฉด 5๋กœ ์กฐ์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

1๋ฒˆ์งธ ์ค„์ธ ๊ฒฝ์šฐ์—๋Š” 7 / 1๋กœ ๋ชซ์ด 7์ด ๋˜๋Š”๋ฐ, ์ˆ˜๋Š” 5๊ฐœ๊นŒ์ง€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชซ์ด 5๋ณด๋‹ค ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์ž๋™์œผ๋กœ 5๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

์ด๋ฅผ kotlin ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

min(t / i, size)

i๋ฒˆ์งธ ์ค„์—์„œ t๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ๋ผ์ธ ๋‹น ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ size๋กœ ๋ฐ›๊ณ  ๋‘ ์ˆ˜์—์„œ ๋” ์ž‘์€ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด t / i๊ฐ€ size๋ณด๋‹ค ์ปค์งˆ ๋•Œ๋„ size๋กœ ๊ณ ์ •๋œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ

๋”๋ณด๊ธฐ
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.min

private var size: Int = 0
private var index: Int = 0
private var answer = 0

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    size = readLine().toInt()
    index = readLine().toInt()

    binarySearch(1, index)
}

private fun binarySearch(start: Int, end: Int) {
    val mid = (start + end) / 2
    if (start > end) {
        println(answer)
        return
    }

    var cnt = 0
    for (i in 1 .. size) {
        cnt += min(mid / i, size)
    }

    if (cnt < index) binarySearch(mid + 1, end)
    else {
        answer = mid
        binarySearch(start, mid - 1)
    }
}

 

๋ฌธ์ œ ํ’€์ด

๋ฐฐ์—ด์˜ ํฌ๊ธฐ์™€ ์ฐพ์•„์•ผ ํ•˜๋Š” index๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  binary search๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

binary search์˜ mid๊ฐ€ ๋ฐฐ์—ด B์˜ index๋ฒˆ์งธ ๊ฐ’์˜ ํ›„๋ณด๊ฐ€ ๋œ๋‹ค.

 

๋ฐ˜๋ณต์„ ๋Œ๋ ค์„œ mid๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜์˜ ์ด๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด ์ฃผ๊ณ , cnt๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ •๋‹ต๋ณด๋‹ค ์ž‘์œผ๋ฉด mid ๊ฐ’์ด ๋” ์ปค์•ผ cnt์˜ ๊ฐœ์ˆ˜๋ฅผ ๋” ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ •๋‹ต๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ๊ฐ’์ด ๋” ์ž‘์•„์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— mid ๊ฐ’์ด ๋” ์ž‘์•„์ ธ์•ผ ํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

์˜ค๋žœ๋งŒ์— ํ’€์–ด๋ณด๋Š” ์ด๋ถ„ ํƒ์ƒ‰ ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๊ฑฐ์™€ ๋ณ„๊ฐœ๋กœ ๊ทธ๋ƒฅ ์–ด๋ ค์› ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ• ์ง€ ๊ฐ์ด ์•ˆ ์žกํ˜”๋‹ค.

์‚ฌ์ง„ 1-1๊นŒ์ง€๋Š” ์ƒ๊ฐํ•ด ๋ดค์ง€๋งŒ ๊ทธ ์ด์ƒ์˜ ์•„์ด๋””์–ด๊ฐ€ ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋ž˜์„œ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋ณต๊ธฐํ•ด ๋ณด๋‹ˆ ๋กœ์ง์ด ์ดํ•ด๊ฐ€ ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํฌ์ŠคํŒ… ๋‚ด์šฉ์ด ์ข€ ๋‚œ์žกํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ฐธ๊ณ ํ•œ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด ํฌ์ŠคํŒ…๋„ ๋‚จ๊ฒจ ๋†“๊ฒ ๋‹ค.

 

๋‚ด๊ฐ€ ์ฐธ๊ณ ํ•œ ๋ฌธ์ œ ํ’€์ด 1

 

BOJ - 1300 k๋ฒˆ์งธ ์ˆ˜ ํ•ด๊ฒฐ ์ „๋žต (C++)

๋ฌธ์ œ ๋งํฌ๋ฐฑ์ค€ 1300๋ฒˆ - k๋ฒˆ์งธ ์ˆ˜  ๋ณธ ๋ฌธ์ œ๋Š” ๊ฝค๋‚˜ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ Idea๋ฅผ ์ฐพ๊ธฐ๋งŒ ํ•œ๋‹ค๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ Idea๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์— 'ํ•จ์ •์œผ๋กœ ๋น ์ง€๊ธฐ ์‰ฌ์šด ์œ ํ˜น'์ด ๋งŽ๊ธฐ

velog.io

๋‚ด๊ฐ€ ์ฐธ๊ณ ํ•œ ํ’€์ด 2

 

[BOJ] 1300 : K๋ฒˆ์งธ ์ˆ˜

1300 : K๋ฒˆ์งธ ์ˆ˜ ํ’€์ด ์ž„์˜์˜ ์ˆซ์ž m์„ ๊ณจ๋ผ์„œ K๋ฒˆ์งธ ์ˆซ์ž์ธ์ง€ ํŒ๋‹จํ•ด๋ณด์ž! ๊ทธ ์ž„์˜์˜ ์ˆซ์ž m์€ ๋ฌด๋ ค O(log K)์—! ๋ฌด๋ ค ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ์ฐพ์•„๋ณด์ž! ๊ทธ๋ ‡๋‹ค๋ฉด ๋– ์˜ค๋ฅด๋Š” ์งˆ๋ฌธ, m ๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์–ด

wookje.dance

 

728x90