๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/Algorithm

[Algorithm/Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Lv.3) - ๊ธฐ์ง€๊ตญ ์„ค์น˜

์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค:) ๊ฝค๋‚˜ ์˜ค๋žœ๋งŒ์ด์ฃ ..? ์ธ๊ฐ„์ด ์™ค์ผ€ ๊ฒŒ์œผ๋ฅผ๊นŒ์š”

์˜ค๋žœ๋งŒ์— ํ‹ฐ์Šคํ† ๋ฆฌ๋ฅผ ๋“ค์–ด์™”๋”๋‹ˆ ํ”ผ๋“œ์— ์ƒˆ ๊ธ€์ด ์—„์ฒญ ๋งŽ๋„ค์š”.. ๋‹ค๋“ค ๊พธ์ค€ํ•œ ๊ธฐ๋ก ๋Œ€๋‹จํ•ด..๋ณธ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค..

๋•๋ถ„์— ์ €๋„ ์ž๊ทน๋ฐ›๊ณ  ๋‹ค์‹œ ์—ด์‹ฌํžˆ ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธ€์„ ์—ด์‹ฌํžˆ ์ช„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!!!! 

์˜ค๋Š˜์€ PS ๊ธฐ๋ก์„ ๋‚จ๊ฒจ๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ Lv3..? ํ‹ฐ์Šคํ† ๋ฆฌ์— ํ’€์ด๊ธฐ๋ก์€ ์•ˆํ–ˆ์ง€๋งŒ.. ๋จธ ํ’€๋‹ค๋ณด๋‹ˆ ๋ ˆ๋ฒจ3๊นŒ์ง€ ์™”๋„ค์š”?

๋ ˆ๋ฒจ3 ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋‹ˆ ํ™•์‹คํžˆ ํŠน์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ฑฐ๋‚˜, ํšจ์œจ์„ฑ๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ์•„์„œ ๊ธฐ๋ก์˜ ํ•„์š”์„ฑ์„ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ ๋ฌธ์ œ ํ’€์ด๊ณผ์ •์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋˜๋Š” ์ข‹์€ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด๋‚˜ ํ’€์ด ๋ฐฉ๋ฒ•๋“ค์„ ๊ธ€๋กœ ๋‚จ๊ฒจ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

์ €์˜ PS ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ณ  ์ ‘๊ทผ ๋ฐ ํ’€์ด ์œ„์ฃผ๋กœ ๊ธฐ๋กํ•ด๋‚˜๊ฐ€๋„๋ก ํ• ๊ฒŒ์š”๐Ÿ™ƒ๐Ÿ™‚

๋ฌธ์ œ ๋งํฌ

 

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

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

programmers.co.kr

๋ฌธ์ œ ํ’€์ด

์ผ๋‹จ ๊ตฌํ˜„ ๋ฌธ์ œ๊ธด ํ•œ๋ฐ.. ์ œํ•œ์‚ฌํ•ญ์ด ์•„๋ž˜์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ๋งŒ ํ•˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ
- N: 200,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
- stations์˜ ํฌ๊ธฐ: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
- stations๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ณ , ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆ˜๋Š” N๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
- W: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ N์ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ธ๋ฑ์Šค ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ•œ ํ›„, stations ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๋จผ์ € ์ „ํŒŒ๊ฐ€ ๋„๋‹ฌํ•˜๋Š” ๊ณณ๋“ค์„ ์ œ์™ธํ•˜๊ณ  ์ค‘๊ฐ„์ค‘๊ฐ„ ์ „ํŒŒ๊ฐ€ ๋‹ฟ์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์ด ์–ด๋”˜์ง€๋ฅผ ํŒŒ์•…ํ•ด์„œ ์ƒˆ๋กœ ์ฆ์„คํ•ด์•ผ ํ•  ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์ž˜ ์ ‘๊ทผํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ.. ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ž˜ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ๋‹ค๋ฅธ ํ’€์ด๋“ค์„ ์ฐธ๊ณ ํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค..๐Ÿฅฒ

์•„์ด๋””์–ด

์ƒˆ๋กœ ์ฆ์„คํ•ด์•ผ ํ•  ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์ „ํŒŒ๊ฐ€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๊ธฐ์ง€๊ตญ๋‹น ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์€ w*2+1 ์ž…๋‹ˆ๋‹ค. (๊ธฐ์ง€๊ตญ์—์„œ ์–‘์ชฝ์œผ๋กœ w๋งŒํผ ๋–จ์–ด์ง„ ๊ณณ๊นŒ์ง€ ์ปค๋ฒ„๊ฐ€๋Šฅํ•˜๊ณ , ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋œ ๊ณณ๋˜ ํฌํ•จ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ + 1) ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ „ํŒŒ๊ฐ€ ๋‹ฟ์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์˜ ๊ฑฐ๋ฆฌ / (w*2+1) ๋ผ๋Š” ์‹์œผ๋กœ ์„ค์น˜ํ•ด์•ผํ•  ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ, ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ปค๋ฒ„ํ•  ์ˆ˜ ์—†๋Š” ๊ตฌ๊ฐ„์ด ์ƒ๊ธด๋‹ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜๋ฅผ +1 ํ•ด์ฃผ์–ด์•ผ ํ•จ์„ ๊ณ ๋ คํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งœ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค! ์ „ํŒŒ๊ฐ€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋Š” ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋œ ์•„ํŒŒํŠธ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์ธ [stations]๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ตฌํ•˜๋ฉด ๋˜๋Š”๋ฐ, [stations]์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ N์ด ์•„๋‹ ๊ฒฝ์šฐ(=๋งˆ์ง€๋ง‰ ์•„ํŒŒํŠธ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ)์—๋Š” ์˜ค๋ฅธ์ชฝ์— ์ „ํŒŒ๊ฐ€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์ด ๋‚จ์•„์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ [stations] ์ˆœํšŒ ์ข…๋ฃŒ ํ›„์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ์ง€๊ตญ ์„ค์น˜๊ฐ€ ๋” ํ•„์š”ํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

1. [stations]๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ „ํŒŒ๊ฐ€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ตฌ๊ฐ„์˜ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ 
2. 1์—์„œ ๊ตฌํ•œ ๊ฑฐ๋ฆฌ / (w*2+1) ๋กœ ํ•ด๋‹น ๊ตฌ๊ฐ„์— ์„ค์น˜ํ•ด์•ผ ํ•  ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ (๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ +1)
3. [stations] ์ˆœํšŒ ์ข…๋ฃŒ ํ›„ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ๋งˆ์ง€๋ง‰ ์•„ํŒŒํŠธ ๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ธฐ์ง€๊ตญ ์„ค์น˜

Swift ํ’€์ด ์ฝ”๋“œ

import Foundation

func solution(_ n:Int, _ stations:[Int], _ w:Int) -> Int {
    var answer = 0
    var leftStart = 1
    
    for station in stations {
        // ์ „ํŒŒ ๋‹ฟ์ง€ ์•Š๋Š” ์™ผ์ชฝ ๊ฑฐ๋ฆฌ ๊ตฌํ•ด์„œ ํ•ด๋‹น ๊ฑฐ๋ฆฌ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ง€๊ตญ ์ตœ์†Œ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
        if leftStart < station - w {
            let leftEnd = station - w
            let length = leftEnd - leftStart
            
            if length % (w*2+1) == 0 {
                answer += length / (w*2+1)
            } else {
                answer += length / (w*2+1) + 1
            }
        }
        leftStart = station + w + 1 // ์™ผ์ชฝ ์‹œ์ž‘์  ๊ฐฑ์‹ 
    }
    
    let last = stations[stations.count-1]
    
    // ์˜ค๋ฅธ์ชฝ์— ์ „ํŒŒ ๋‹ฟ์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ๋‚จ์œผ๋ฉด
    if last + w + 1 <= n {
        leftStart = last + w + 1
        
        let leftEnd = n+1 // ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ 1 ๋”ํ•ด์คŒ
        let length = leftEnd - leftStart
        
        if length % (w*2+1) == 0 {
            answer += length / (w*2+1)
        } else {
            answer += length / (w*2+1) + 1
        }
    }
    
    return answer
}

 


[์ฐธ๊ณ  ์ž๋ฃŒ]

 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ธฐ์ง€๊ตญ ์„ค์น˜ Java ํ’€์ด

์ด ๊ธ€์€ ํ˜ผ์ž ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ๋ฌธ์ œ N๊ฐœ์˜ ์•„ํŒŒํŠธ๊ฐ€ ์ผ๋ ฌ๋กœ ์ญ‰ ๋Š˜์–ด์„œ ์žˆ์Šต๋‹ˆ

small-stap.tistory.com