๋ฌธ์ :
https://www.acmicpc.net/problem/2302
๋ถ์ :
์ฒ์์๋ VIP ์ข์๋ง ๋ฐ๋ก 1๋ก ๋ฐฐ์ด์ ๋ฐ๊ณ 1์ ๊ธฐ์ค์ผ๋ก ๋๋ ๋ฐฐ์ด์ ์นธ๋งํผ ๊ณฑํ๋ฉด(ํ์นธ์ฉ ์ด๋ํ๋ ๊ฒฝ์ฐ) ๋๋๊ฑฐ ์๋๊ฐ ? ์๊ฐํ๋ค. ํ์ง๋ง ์ ์ถ ํ ํ๋ฆฌ๊ณ ๋ณด๋ ๋ฐฐ์ด์นธ๋งํผ์ ๋์ฌ๋๋ผ๋ฆฌ๋ง ์๋ฆฌ๋ฅผ ๋ฐ๊ฟจ์๋๋๋ผ ใ
๋ง์ฝ
์ด๋ฌํ ๋ฐฐ์ด์ด ์์๋
1,2,3,4 ์ค ๋ ์ ์๋ฅผ ๋ค์ด 1,2๋ง ์๋ฆฌ ๋ฐ๊ฟจ์๋ ๋ชจ๋ ์์ ๋ํ ๊ฒฝ์ฐ์ ์๋ ์์์ ๊ฐ์๋งํผ 4์ด์ง๋ง
12๊ฐ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ ์ฌ์ด 34๋ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ ์๋ค ๊ทธ๋์ ์ด๊ฑฐ๋ ์ด๋ ๊ฒ ํ๋ฉด ์๋๊ณ ๋ค์ DP๋ก ์ ๊ทผํ์๋ค.
๊ฐ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ณ ๋ถ๋ถ ๋ฐฐ์ด์ ๊ฒฝ์ฐ์์๋งํผ ๊ณฑํด์ค๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํ ์๋ฆฌ๋ ์ด๋ป๊ฒ ๋ฐ๊พธ๋๊ฐ ?
์ ํ์ d๋ n๊ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด n๋ฒ์งธ ์์๊ฐ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋์ง ์๋ฐ๊พธ๋์ง๋ก ๊ฒฝ์ฐ์์๊ฐ ๋๋๋ค.
n๋ฒ์งธ ์์๊ฐ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ์ง ์๋๋ค โ : 1 ~ n-1๋ฒ์งธ ์์์ ๋ํด ๊ฒฝ์ฐ์ ์๋ฅผ ์๊ฐํ๋ค.
n๋ฒ์งธ ์์๊ฐ ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค ๐ : ๊ทธ๋ ๋ค๋ฉด n-1๋ฒ์งธ ์์์ ๋ฐ๊ฟ์ผ ํ๋ค ๋ฐ๋ผ์ n-1, n๋ฒ์งธ ์์๋ฅผ ์ ์ธํ 1 ~ n-2๋ฒ์งธ ์์์ ๋ํ ๊ฒฝ์ฐ์์๋ฅผ ์๊ฐํ๋ค.
๋ฐ๋ผ์ ์ ํ์์ ์๋์ ๊ฐ๋ค.
d[n] = d[n-1] + d[n-2] (์๊ฐ๋ณด๋ค ๊ฐ๋จํ ์ ํ์์ด๋ค ๊ธฐ์ค๋ง ์์ธ์ด๋ค๋ฉด ..)
Swift ์ฝ๋ :
//
// main.swift
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/04/16.
//
import Foundation
var n = Int(readLine()!)!
var arr = Array(repeating: 0, count: n)
var m = Int(readLine()!)!
for _ in 0..<m {
let vip = Int(readLine()!)!
arr[vip-1] = 1
}
var result = 1
for i in arr.split(separator: 1) {
var d = Array(repeating: 0, count: i.count)
if i.count == 1 || i.count == 2 {
result *= i.count
}else {
d[0] = 1 // 1๋ช
d[1] = 2 // 2๋ช
for num in 2..<i.count {
d[num] = d[num-1] + d[num-2]
}
result *= d[i.count - 1]
}
}
print(result)
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] Swift 14503 ๋ก๋ด ์ฒญ์๊ธฐ ์๋ฎฌ๋ ์ด์ , DFS (0) | 2022.04.18 |
---|---|
[๋ฐฑ์ค] Swift ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น BFS (0) | 2022.04.17 |
[๋ฐฑ์ค] Swift 1309 ๋๋ฌผ์ DP (0) | 2022.04.16 |
[๋ฐฑ์ค] 1049 Swift ๊ธฐํ์ค Greedy (0) | 2022.04.13 |
[๋ฐฑ์ค] Swift 20361 ์ผ์ฐ๋ ์ผ๋ฐ์๊พผ implementation (0) | 2022.04.12 |
๋๊ธ