MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ : 16974๋ฒˆ: ๋ ˆ๋ฒจ ํ–„๋ฒ„๊ฑฐ ๋ณธ๋ฌธ

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

[swift] ๋ฐฑ์ค€ : 16974๋ฒˆ: ๋ ˆ๋ฒจ ํ–„๋ฒ„๊ฑฐ

MUKER 2023. 7. 11. 23:48
๋ฌธ์ œ ๋งํฌ
 

16974๋ฒˆ: ๋ ˆ๋ฒจ ํ–„๋ฒ„๊ฑฐ

์ƒ๊ทผ๋‚ ๋“œ์—์„œ ์˜ค๋žœ๋งŒ์— ์ƒˆ๋กœ์šด ํ–„๋ฒ„๊ฑฐ๋ฅผ ์ถœ์‹œํ–ˆ๋‹ค. ๋ฐ”๋กœ ๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ์ด๋‹ค. ๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ ๋‹ค. ๋ ˆ๋ฒจ-0 ๋ฒ„๊ฑฐ๋Š” ํŒจํ‹ฐ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ๋Š” ํ–„๋ฒ„๊ฑฐ๋ฒˆ, ๋ ˆ๋ฒจ-(L-1) ๋ฒ„๊ฑฐ,

www.acmicpc.net


๋ฌธ์ œ

์ƒ๊ทผ๋‚ ๋“œ์—์„œ ์˜ค๋žœ๋งŒ์— ์ƒˆ๋กœ์šด ํ–„๋ฒ„๊ฑฐ๋ฅผ ์ถœ์‹œํ–ˆ๋‹ค. ๋ฐ”๋กœ ๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ์ด๋‹ค. ๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ ๋‹ค.

  • ๋ ˆ๋ฒจ-0 ๋ฒ„๊ฑฐ๋Š” ํŒจํ‹ฐ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๋ ˆ๋ฒจ-L ๋ฒ„๊ฑฐ๋Š” ํ–„๋ฒ„๊ฑฐ๋ฒˆ, ๋ ˆ๋ฒจ-(L-1) ๋ฒ„๊ฑฐ, ํŒจํ‹ฐ, ๋ ˆ๋ฒจ-(L-1)๋ฒ„๊ฑฐ, ํ–„๋ฒ„๊ฑฐ๋ฒˆ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (L ≥ 1)

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ ˆ๋ฒจ-1 ๋ฒ„๊ฑฐ๋Š” 'BPPPB', ๋ ˆ๋ฒจ-2 ๋ฒ„๊ฑฐ๋Š” 'BBPPPBPBPPPBB'์™€ ๊ฐ™์ด ์ƒ๊ฒผ๋‹ค. (B๋Š” ํ–„๋ฒ„๊ฑฐ๋ฒˆ, P๋Š” ํŒจํ‹ฐ)

์ƒ๋„๊ฐ€ ์ƒ๊ทผ๋‚ ๋“œ์— ๋ฐฉ๋ฌธํ•ด์„œ ๋ ˆ๋ฒจ-N ๋ฒ„๊ฑฐ๋ฅผ ์‹œ์ผฐ๋‹ค. ์ƒ๋„๊ฐ€ ํ–„๋ฒ„๊ฑฐ์˜ ์•„๋ž˜ X์žฅ์„ ๋จน์—ˆ์„ ๋•Œ, ๋จน์€ ํŒจํ‹ฐ๋Š” ๋ช‡ ์žฅ์ผ๊นŒ? ํ•œ ์žฅ์€ ํ–„๋ฒ„๊ฑฐ๋ฒˆ ๋˜๋Š” ํŒจํ‹ฐ ํ•œ ์žฅ์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ X๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๋„๊ฐ€ ๋จน์€ ํŒจํ‹ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ œํ•œ

  • 1 ≤ N ≤ 50
  • 1 ≤ X ≤ ๋ ˆ๋ฒจ-N ๋ฒ„๊ฑฐ์— ์žˆ๋Š” ๋ ˆ์ด์–ด์˜ ์ˆ˜

์˜ˆ์ œ


์„ฑ๊ณต ํ’€์ด

let NX = readLine()!.split { $0 == " " }.map { Int($0)! }
let N = NX[0], X = NX[1]
var total = [1]+Array(repeating: 0, count: 50)
var patty = [1]+Array(repeating: 0, count: 50)

for i in 1...N {
    total[i] = total[i-1]*2+3
    patty[i] = patty[i-1]*2+1
}

func sol(n: Int, x: Int) -> Int {
    if n == 0 { return x }
    if x == 1 { return 0 }
    if x == total[n] { return patty[n] }
    
    if x == total[n-1] + 2 {
        return patty[n-1] + 1
    } else if x < total[n-1] + 2 {
        return sol(n: n-1, x: x-1)
    } else {
        return patty[n-1] + 1 + sol(n: n-1, x: x - (total[n-1] + 2))
    }
}

print(sol(n: N, x: X))