728x90
728x90

๐ค ๋ฌธ์ ์ ํ :: ๋ธ๋ฃจํธํฌ์ค(์์ ํ์) / ๋ฐฑํธ๋ํน
๐ก ํ์ด ๋ฐฉ๋ฒ
โ๏ธ ๊ฐ์ํ๋ ์๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง ๋จผ์ ์๊ฐํด๋ณธ๋ค.
๐ n ์๋ฆฌ์ ์ซ์๋ผ๋ฉด ์ฒซ์งธ ์๋ฆฌ๊ฐ ๊ณ ์ ๋์ด์์ ๋, ๋๋ฒ์งธ๋ ์ฒซ์งธ ์๋ฆฌ๋ณด๋ค ์์ ๊ฐ์ผ๋ก, ์ธ๋ฒ์งธ๋ ๋๋ฒ์งธ ์๋ฆฌ๋ณด๋ค ์์ ๊ฐ์ผ๋ก, n๋ฒ์งธ ์๋ฆฌ๋ n-1 ๋ฒ์งธ ์๋ฆฌ๋ณด๋ค ์์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
โ๏ธ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฐธ๊ณ ํด์ผ ํ๋ ์ฌํญ๋ค
- ๊ฐ์ํ๋ ์์ ์ต๋๊ฐ์ 9876543210์ผ๋ก, ์ต๋ ์๋ฆฌ์๋ 10์๋ฆฌ์ด๋ค.
- ๊ฐ์ํ๋ ์์ ์ต์๊ฐ์ 0์ผ๋ก, ์ต์ ์๋ฆฌ์๋ 1์ด๋ค.
- ๊ฐ์ํ๋ ์์ ๊ฐ์๋ 1022๊ฐ์ด๋ค. N = 1023 ๋ถํฐ๋ -1์ ์ถ๋ ฅํด์ผ ํ๋ค.
โ๏ธ ํ์ด๋ฅผ ์ ๋ฆฌํ์๋ฉด ?!
- ์๋ฆฌ ์๋ฅผ ์ง์ ํ๊ณ , ์๋ฆฌ์์ ๋ฐ๋ผ ๊ฐ์ํ๋ ์๋ฅผ ์ฐพ๋๋ค. --- 0 ๋ถํฐ 9๊น์ง ๋ฐ๋ณตํ๋ค. (ํน์ 1 ~ 10)
- 0๋ฒ์งธ ์๋ฆฌ์ 0 ~ 9 ๊น์ง์ ์ซ์๋ฅผ ๊ณ ์ ์ํค๊ณ , DFS ๋ฅผ ํตํด 1..<n ๋ฒ์งธ ์๋ฆฌ์ ๊ฐ์ ์ฐพ๋๋ค.
- DFS ์์๋ ํ์ฌ๊น์ง ์ฑ์์ง ์๋ฆฌ์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค๋ก ๋ค์ ๊ฐ์ ๋์ ์ํจ๋ค.
- DFS ์ข ๋ฃ๋ ์ฑ์์ง ์๋ฆฌ์๊ฐ ์ง์ ๋ ์๋ฆฌ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์ข ๋ฃ๋๋ฉฐ, ์ด ๋ ๊ฐ์ํ๋ ์ ๋ฐฐ์ด์ ๊ฐ์ ์ถ๊ฐํ๋ค.
๐ Swift ํ์ด
struct BOJ_1038 {
var decreasingNumbers: [Int] = []
/// j ๋ฒ์งธ ์๋ฆฌ์ ๊ฐ์ ์ฑ์๊ฐ๋ฉฐ number ๋ฐฐ์ด์ ์์ฑํ๋ ํจ์, i ๋ฒ์งธ ์๋ฆฌ๊น์ง ๋ค ์ฐจ๋ฉด decreasingNumbers ์ ์ถ๊ฐํ๋ค.
mutating func dfs(_ i: Int, _ j: Int, number: [Int]) {
// i ๋ ์ซ์์ ์๋ฆฌ์, j ๋ ํ์ฌ๊น์ง ์ฑ์์ง ์๋ฆฌ์
if j >= i {
let intNumber = number.reduce(0, {$0*10 + $1})
decreasingNumbers.append(intNumber)
return
}
for k in (0..<number[j]).reversed() {
var newNumber = number
newNumber[j+1] = k
dfs(i, j+1, number: newNumber)
}
}
/// N ๋ฒ์งธ ๊ฐ์ํ๋ ์๋ฅผ ์ฐพ๋ ํจ์
mutating func findDecreasingNumbers(_ N: Int) {
// i ๋ ์ซ์์ ์๋ฆฌ์, num ์ 0๋ฒ์ฌ ์ซ์๋ก ์ง์ ํ ๊ฐ
for i in 0...9 {
for num in 0...9 {
var number = Array(repeating: 0, count: i+1)
number[0] = num
dfs(i, 0, number: number)
}
}
decreasingNumbers.sort()
if N >= decreasingNumbers.count {
print(-1)
} else {
print(decreasingNumbers[N])
}
}
mutating func run() {
let N = Int(readLine()!)!
findDecreasingNumbers(N)
}
}
var boj = BOJ_1038()
boj.run()
โ๏ธ ์ฐธ๊ณ ํ ๋ฌธ๋ฒ
์ ์ํ ๋ฐฐ์ด [Int] ๋ฅผ ๋ฐฐ์น๋ ์์๋๋ก ์ ์ํ ์ซ์ Int ๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ
let intNumber = number.reduce(0, {$0*10 + $1})
Concatenate Swift Array of Int to create a new Int
How can you make an Array ([1,2,3,4]) into a regular Int (1234)? I can get it to go the other way (splitting up an Int into individual digits), but I can't figure out how to combine the ...
stackoverflow.com
728x90
728x90