๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/๋ฐฑ์ค€

[๋ฐฑ์ค€] Swift 1309 ๋™๋ฌผ์› DP

by Jouureee 2022. 4. 16.

๋ฌธ์ œ :

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

 

1309๋ฒˆ: ๋™๋ฌผ์›

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ถ„์„ :

์ฒ˜์Œ์—” N์€ ์ฃผ์–ด์กŒ๋Š”๋ฐ ์‚ฌ์ž์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์•„์„œ ์–ด๋–ป๊ฒŒ ํ‘ธ๋Š”๊ฑด์ง€ ๋‹นํ™ฉํ–ˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ๋™๋ฌผ ์ˆ˜์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋™๋ฌผ์ด ํ•œ๋งˆ๋ฆฌ์ผ๊ฒฝ์šฐ, 2๋งˆ๋ฆฌ์ผ ๊ฒฝ์šฐ .. ๋กœ ์ƒ๊ฐํ•ด๋ณด์•˜๋Š”๋ฐ ๊ทœ์น™์„ ์ฐพ๊ธฐ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ๊ฒฐ๊ตญ ์ ํ™”์‹ ์„ธ์šฐ๋Š” ๊ฒƒ์ด ๋„๋ฌด์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•„ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ํ’€์—ˆ๋‹ค ใ…œ

๋™๋ฌผ์˜ ์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด N์„ ๊ฐ€์ง€๊ณ  ๋‚˜๋ˆ  ์ƒ๊ฐํ•ด๋ณด์ž

์šฐ์„  ๋™๋ฌผ์›์˜ N = 1์ธ ๊ฒฝ์šฐ,

N๋ฒˆ์งธ ์ค„์— ์‚ฌ์ž๋Š” ์—†๋‹ค, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ด 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ง€๋‹Œ๋‹ค. N=1 -> 3

N = 2์ธ๊ฒฝ์šฐ,

ํ˜„์žฌ 2๋ฒˆ์งธ ์ค„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—†๋‹ค, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜์ˆ˜๋ฅผ ์ง€๋‹Œ๋‹ค.

1) ํ˜„์žฌ ์ค„์— ์‚ฌ์ž๊ฐ€ ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์‚ฌ์ž๋Š” ์—†๋‹ค, ์˜ค๋ฅธ์ชฝ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ์ง€๋‹Œ๋‹ค -> 2

2) ํ˜„์žฌ ์ค„์— ์‚ฌ์ž๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์‚ฌ์ž๋Š” ์—†๋‹ค, ์™ผ์ชฝ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋งŒ ์ง€๋‹Œ๋‹ค -> 2

3) ํ˜„์žฌ ์ค„์— ์‚ฌ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์‚ฌ์ž๋Š” ์—†๋‹ค, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ง€๋‹Œ๋‹ค -> 3

 

๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ ํ™”์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

d[i][0] = d[i-1][0] + d[i-1][1] + d[i-1][2]
d[i][1] = d[i-1][0] + d[i-1][2]
d[i][2] = d[i-1][0] + d[i-1][1]

 

Swift ์ฝ”๋“œ :

//
//  main.swift
//  SOMA๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
//
//  Created by JoSoJeong on 2022/04/16.
//

import Foundation
var n = Int(readLine()!)!
var d: [[Int]] = Array(repeating: Array(repeating: 0, count: 3), count: n+1)
var mod = 9901
func placeLion() -> Int {
    d[1][0] = 1 // n์ด 1์ผ๋•Œ 0 - ์‚ฌ์ž x
    d[1][1] = 1 // ์‚ฌ์ž ์™ผ์ชฝ์—
    d[1][2] = 1 // ์‚ฌ์ž ์˜ค๋ฅธ์ชฝ์—
    for i in 2..<n+1 {
        d[i][0] = (d[i-1][0] + d[i-1][1] + d[i-1][2]) % 9901
        d[i][1] = (d[i-1][0] + d[i-1][2]) % 9901
        d[i][2] = (d[i-1][0] + d[i-1][1]) % 9901
    }
    return (d[n].reduce(0) { $0 + $1 }) % 9901
}
print(placeLion())

๋Œ“๊ธ€