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

Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] (Swift) ์ž…๊ตญ์‹ฌ์‚ฌ (lv.3, ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜)

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

์ด๋ถ„ํƒ์ƒ‰๊ณผ ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜์˜ ์ฐจ์ด์ ๊ณผ, ์–ด๋Š ๋•Œ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€์— ๋Œ€ํ•ด์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐˆ ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋œ๋‹ค. ๋งจ ๋ฐ‘๋ถ€๋ถ„์— ์ด ๋ฌธ์ œ๊ฐ€ ์™œ ํŒŒ๋ผ๋ฉ”ํŠธ๋ฆญ ์„œ์น˜๋กœ ํ’€๋ฆฌ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ์ ์–ด๋†จ๋‹ค. ๊ทธ๊ฒƒ์„ ํ•ญ์ƒ ๊ธฐ์–ตํ•˜์ž!

 

โšซ๏ธ ๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/43238

 

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

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

programmers.co.kr

 

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

์ด๊ฑฐ ๋ฐ”๋กœ ์ง์ „์— ํ‘ผ ๋ฌธ์ œ์™€ ๋งค์šฐ ๋น„์Šทํ–‡๊ธฐ ๋•Œ๋ฌธ์— ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. (๋ฐ”๋กœ ์ด์ „์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ ์•„๋ž˜ ๋ฐฑ์ค€์˜ ๊ณต์œ ๊ธฐ์„ค์น˜)

https://didu-story.tistory.com/434

 

[๋ฐฑ์ค€] (Swift) 2110๋ฒˆ - ๊ณต์œ ๊ธฐ ์„ค์น˜ (๊ณจ๋“œ4, ์ด๋ถ„ํƒ์ƒ‰)

โšซ๏ธ ๋ฌธ์ œ https://www.acmicpc.net/problem/2110 2110๋ฒˆ: ๊ณต์œ ๊ธฐ ์„ค์น˜ ์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์œ ๊ธฐ์˜ ๊ฐœ์ˆ˜ C (2 ≤ C ≤ N)์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜

didu-story.tistory.com

์ด๋ถ„ํƒ์ƒ‰์˜ ๋ฌธ์ œ ์œ ํ˜•์ด ์ด๋Ÿฐ์‹์ธ๊ฑด๊ฐ€? ์•„์ง ์‚ฌ์‹ค ์ด๋ถ„ํƒ์ƒ‰์˜ ๋ฌธ์ œ ์œ ํ˜•์„ ์™„๋ฒฝํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
๊ทธ๋ƒฅ, ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ถ„๋ฅ˜๋˜์–ด์žˆ์œผ๋‹ˆ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ’€์—ˆ์„๋ฟ ใ… ใ…  
ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ๋ฒ”์œ„๊ฐ€ ํฌ๋‹ค๋ฉด ์ด๋ถ„ํƒ์ƒ‰์„ ์˜์‹ฌ(?)ํ•ด๋ด์•ผ๊ฒ ๋‹ค. (์ด ๋ฌธ์ œ๋„ ๋ฒ”์œ„๊ฐ€ 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๋ช…์ด์ƒ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?'๋ผ๋Š” ๊ฒฐ์ •๋ฌธ์ œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค!

๋ฐ˜์‘ํ˜•