๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ์นด๋“œ2 BOJ #2164

by seolhee2750 2021. 8. 13.
๋ฌธ์ œ ์„ค๋ช…

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

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

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

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

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

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

 

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

์ž…๋ ฅ

6

์ถœ๋ ฅ

4

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

let N = Int(readLine()!)!
var queue = 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
    }
}

์ด ๋ฌธ์ œ๋Š” ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ–ˆ๋‹ค.

  • queue๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ–ˆ๊ณ , 1๋ถ€ํ„ฐ ์ž…๋ ฅ๋œ ์ˆซ์ž N๊นŒ์ง€ ๋‹ด์•˜๋‹ค.
  • ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ tmp ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๊ณ , ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง„ํ–‰์„ ์œ„ํ•ด 0์„ ์ €์žฅํ–ˆ๋‹ค.
  • ์šฐ์„ , 1์ด ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ์—๋Š” ์‚ญ์ œํ•  ๊ฒƒ ์—†์ด ๋ฐ”๋กœ 1์ด ๋‹ต์ผ ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ์— ์˜ˆ์™ธ๋กœ ๋นผ์ฃผ์—ˆ๋‹ค.
  • ๊ทธ ์™ธ์—๋Š” while๋กœ queue ํƒ์ƒ‰์„ ๋ฐ˜๋ณต์‹œ์ผœ์ฃผ์—ˆ๋Š”๋ฐ,
    ๋จผ์ € queue[tmp] = 0 ์„ ํ†ตํ•ด ์ˆ˜๋ฅผ ์ง€์šฐ๊ณ  0์œผ๋กœ ๋Œ€์ฒดํ–ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์ง€์šด ์ˆ˜ ๋ฐ”๋กœ ๋’ท ์ˆซ์ž๋ฅผ queue์— appendํ•ด์ฃผ๊ณ , ์ง€์šด ์ˆซ์ž ์ž๋ฆฌ๋„ 0์œผ๋กœ ๋Œ€์ฒดํ–ˆ๋‹ค.
    ์‹ค์ œ๋กœ ๋ฐฐ์—ด ์ž๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  0์œผ๋กœ ๋Œ€์ฒดํ•ด์ค€ ํ›„, ํ•„์š”ํ•œ ์ˆ˜๋Š” ๋’ค์— ์ถ”๊ฐ€ํ•ด์คŒ์œผ๋กœ์จ
    ๋ฐฐ์—ด์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ๋‹น๊ธฐ๋Š” ๋น„ํšจ์œจ์ ์ธ ์‹คํ–‰์„ ๋ฐฐ์ œํ–ˆ๋‹ค.
  • ๋ฐ˜๋ณต๋งˆ๋‹ค queue ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์—์„œ ๋‘ ๋ฒˆ์งธ ์ž๋ฆฌ๊ฐ€ 0์ธ์ง€๋ฅผ ๊ฒ€์‚ฌํ–ˆ๋‹ค.
    ๋งˆ์ง€๋ง‰์—์„œ ๋‘ ๋ฒˆ์งธ ์ž๋ฆฌ๊ฐ€ 0์ด๋ผ๋ฉด, ๋งจ ๋งˆ์ง€๋ง‰ ์ˆ˜๊ฐ€ ๋‹ต์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์ถœ๋ ฅ ํ›„ break ํ–ˆ๋‹ค.
  • ์œ„์˜ if๋ฌธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” tmp์— 2๋ฅผ ๋”ํ•ด์„œ ๋ฐ˜๋ณต์„ ๊ณ„์†ํ–ˆ๋‹ค.
    (๋‘ ์ˆซ์ž์”ฉ ์ง€์›Œ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— 2๋ฅผ ๋”ํ–ˆ๋‹ค.)

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • stack ๋ฌธ์ œ๋“ค๊ณผ ๋น„์Šทํ•œ๋ฐ, ๋ฐฐ์—ด์˜ ๋งจ ์•ž๊ณผ ๋งจ ๋’ค๋ฅผ ํ•จ๊ป˜ ๊ฒ€์‚ฌํ•˜๋ฉฐ ์ง„ํ–‰ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์„ ํ˜• ํ๋“  ์›ํ˜• ํ๋“ , ๋ฐฐ์—ด์˜ ์•ž์ด๋‚˜ ์ค‘๊ฐ„์ฆˆ์Œ์„ ์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ”ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ๋Š” ๊ฑฐ์˜ ๊ฐ™๋‹ค.
  • ํ๋Š” FIFO ๊ตฌ์กฐ์ด์ง€๋งŒ, FIFO์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€