๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ๋ฐฑ์ค€ 2164๋ฒˆ - ์นด๋“œ2

by hyebin (Helia) 2023. 3. 21.
๋ฐ˜์‘ํ˜•
๋ฐฑ์ค€ ๋ฌธ์ œ ๋ชจ์Œ

๋ฌธ์ œ ๋งํฌ

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

 

2164๋ฒˆ: ์นด๋“œ2

N์žฅ์˜ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ฐจ๋ก€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฉฐ, 1๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์œ„์—, N๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์•„๋ž˜์ธ ์ƒํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์นด๋“œ๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์นด๋“œ๊ฐ€

www.acmicpc.net

 

๋ฌธ์ œ

N์žฅ์˜ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ฐจ๋ก€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฉฐ, 1๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์œ„์—, N๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์•„๋ž˜์ธ ์ƒํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์นด๋“œ๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค.

์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์นด๋“œ๊ฐ€ ํ•œ ์žฅ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ์„ , ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ๋ฐ”๋‹ฅ์— ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋‹ค์Œ, ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ์ œ์ผ ์•„๋ž˜์— ์žˆ๋Š” ์นด๋“œ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด N=4์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. ์นด๋“œ๋Š” ์ œ์ผ ์œ„์—์„œ๋ถ€ํ„ฐ 1234์˜ ์ˆœ์„œ๋กœ ๋†“์—ฌ์žˆ๋‹ค. 1์„ ๋ฒ„๋ฆฌ๋ฉด 234๊ฐ€ ๋‚จ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ 2๋ฅผ ์ œ์ผ ์•„๋ž˜๋กœ ์˜ฎ๊ธฐ๋ฉด 342๊ฐ€ ๋œ๋‹ค. 3์„ ๋ฒ„๋ฆฌ๋ฉด 42๊ฐ€ ๋˜๊ณ , 4๋ฅผ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด 24๊ฐ€ ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 2๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋‚˜๋ฉด, ๋‚จ๋Š” ์นด๋“œ๋Š” 4๊ฐ€ ๋œ๋‹ค.

N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋‚จ๊ฒŒ ๋˜๋Š” ์นด๋“œ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋‚จ๊ฒŒ ๋˜๋Š” ์นด๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

  • ์ž๋ฃŒ ๊ตฌ์กฐ
  • ํ

๋ฌธ์ œ ํ’€์ด

  • n์„ ์ž…๋ ฅ๋ฐ›์€ ํ›„, 1๋ถ€ํ„ฐ n๊นŒ์ง€๋ฅผ ๋ฐฐ์—ด ์š”์†Œ๋กœ ๊ฐ–๋Š” ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด queue๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • n์ด 1์ธ ๊ฒฝ์šฐ๋Š” 1์„ print ํ•œ๋‹ค.
  • ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ์—๋Š” while ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค
    • tmp๋ณ€์ˆ˜๋ฅผ 0๋ถ€ํ„ฐ 2์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
    • queue์—์„œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 0์œผ๋กœ ์ €์žฅํ•œ๋‹ค. (์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ)
    • ์ดํ›„ queue์— queue์˜ tmp+1 ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , queue์˜ tmp+1 ๋ฒˆ์งธ ์š”์†Œ๋ฅผ 0์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
    • ๋งŒ์•ฝ queue.count-2๊ฐ€ 0์ด๋ผ๋ฉด queue์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.
      • (queue.count-2) ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ 0์ด๋ผ๋ฉด ์นด๋“œ 2๊ฐœ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ์ด๊ณ , ๋‹ค์Œ์— ์•ž์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์ด๋‹ค. 
        • ex - ์นด๋“œ๊ฐ€ 342 ์ผ ๋•Œ, 3์„ ๋ฒ„๋ฆฌ๋ฉด queue๋Š” 042๊ฐ€ ๋œ๋‹ค. ์ดํ›„ 4๋ฅผ ๋’ค๋กœ ์˜ฎ๊ธฐ๋ฉด 0024๊ฐ€ ๋œ๋‹ค. <(queue.count-2) ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ 0>
        • ๋งˆ์ง€๋ง‰์œผ๋กœ 2๋ฅผ ๋ฒ„๋ฆฌ๋ฉด ๋‚จ๋Š” ์นด๋“œ๋Š” 4๊ฐ€ ๋œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ

var n = Int(readLine()!)!
var queue: [Int] = Array(1...n)
var tmp = 0

if n == 1 { print(1) }
else{
    while true{
        queue[tmp] = 0
        queue.append(queue[tmp + 1])
        queue[tmp + 1] = 0
        if queue[queue.count - 2] == 0 { print(queue.last!); break }
        tmp += 2
    }
}
  • 36ms ์†Œ์š”

๋‹ค๋ฅธ ์ฝ”๋“œ

let N = Int(readLine()!)!

var i = 1
while true {
    if N >= i , N < i*2 {
        break
    }else{
        i *= 2
    }
}
let remain = N-i
if remain == 0 {
    print(i)
}else {
    print(2*remain)
}
  • 8ms ์†Œ์š”
  • ํ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  2์˜ ์ œ๊ณฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์ž‘์„ฑ
๋ฐ˜์‘ํ˜•