MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 2164๋ฒˆ: ์นด๋“œ2 ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

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

MUKER 2023. 2. 14. 00:26
 

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

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

www.acmicpc.net

๋ฌธ์ œ ํ‘ธ๋Š” ๋ฐ ์žˆ์–ด ๋„์›€์ด ๋˜๋„๋ก ๋‚˜์˜ ํ’€์ด์™€ ๊ฐœ์„ ๋œ ํ’€์ด๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
๋˜ํ•œ ํ’€์ด ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ• ๋งŒํ•œ ํ’€์ด๋„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

- ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‚˜์˜ ํ’€์ด๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๋‹น ํ’€์ด๋“ค์€ ํ’€์ด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ ์ตœ์„ ์˜ ํ’€์ด๋Š” ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

๋ฌธ์ œ ์„ค๋ช…

 

- ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ์ง€์šฐ๊ณ , ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ์ œ์ผ ๋’ค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.(์•ž์—์„œ ์‚ฌ๋ผ์ง)

ํ•ด๋‹น ๋ช…๋ น์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ๋‚จ๋Š” ํ•˜๋‚˜์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

- ๊ธฐ๋ณธ์ ์ธ ํ์˜ ํ˜•ํƒœ๋กœ ํ’€๋ฉด๋˜์ง€๋งŒ

์ˆซ์ž๋ฅผ ์ง€์šฐ๋Š” ๊ณผ์ •์—์„œ removeํ•จ์ˆ˜๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

 

- ์ด์œ ๋Š” ์ธ๋ฑ์Šค ์ „์ฒด๋ฅผ ์•ž์œผ๋กœ ๋‹น๊ฒจ์˜ค๋Š” ๊ณผ์ •์—์„œ

O(n)๋งŒํผ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

- ๋”ฐ๋ผ ์‹œ๊ฐ„์ œํ•œ์— ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 


 

๋‚˜์˜ ํ’€์ด

import Foundation

let N = Int(readLine()!)!

var card: [Int?] = (1...N).map { $0 }
var head = 0

while true {
    guard card.count != 1 else { print(1); break }
    card[head] = nil
    if card[card.count-2] == nil { print(card[card.count-1]!); break }
    card.append(card[head+1])
    card[head+1] = nil
    head += 2
}

 

- head๋ผ๋Š” ์ธ๋ฑ์Šค ๊ธฐ์–ต๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด์ด remove ๋˜๋Š” ๊ฒŒ ์•„๋‹Œ

nil๋กœ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

๋‚จ์•„ ์žˆ๋Š” ๋ฐฐ์—ด์„ ๊ฑด๋„ˆ๋›ฐ์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

 

- head๋Š” ํ•œ ๋ฒˆ์˜ ๋ฐ˜๋ณต์—์„œ 2๊ฐœ์˜ ๊ฐ’์„ nil๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์—

๋ฐ˜๋ณต๋งˆ๋‹ค + 2์”ฉ ๋”ํ•ด์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

- ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋‹ค ๋งˆ์ง€๋ง‰์—์„œ 2๋ฒˆ์งธ์ธ ๊ฐ’์ด nil์ด ๋œ๋‹ค๋ฉด

๊ฐ’์€ ํ•˜๋‚˜๊ฐ€ ๋‚จ์•˜๋‹ค๋Š” ๊ฒƒ์ด๊ณ 

ํ•ด๋‹น ๋งˆ์ง€๋ง‰๊ฐ’์„ ์ถœ๋ ฅํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

- ๋งŒ์•ฝ N์ด 1์ด๋ผ๋ฉด ๋Ÿฐํƒ€์ž„์˜ค๋ฅ˜๊ฐ€ ๋œจ๊ธฐ ๋•Œ๋ฌธ์—

guard๋ฌธ์œผ๋กœ count๊ฐ€ 1์ด๋ผ๋ฉด 1์„ ์ถœ๋ ฅํ•˜๊ฒŒ ์˜ˆ์™ธ๋ฅผ ๋’€์Šต๋‹ˆ๋‹ค.

 


 

์ฐธ๊ณ ํ• ๋งŒํ•œ ํ’€์ด

var N = Int(readLine()!)!
var Q = (1...N).map{$0}

var cursor = 0
while cursor < N-1 {
    cursor += 2
    Q.append(Q[cursor-1])
    N+=1
}

print(Q[cursor])

 

- while๋ฌธ์— ์กฐ๊ฑด์„ ์ค˜์„œ ํ‘ธ๋‹ˆ

๋” ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„ค์š”.

 


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)
}

 

- ๋ญ”๊ฐ€ ํ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ’€ ์ˆ˜ ์žˆ์„ ๊ฑฐ ๊ฐ™์•˜๋Š”๋ฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•„์„œ ์‹œ๋„๋„ ๋ชปํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

- ํ•˜์ง€๋งŒ ์—ญ์‹œ ๋ˆ„๊ตฐ๊ฐ€๋Š” ํ’€์—ˆ๋„ค์š”..ใ…Žใ…Ž