๐ TIL - Character๋ ๋ฐ๋ก Int๋ก ๋ณํ์ด ์๋๋ค.
์์ค,, index์๋ฌ๊ฐ ์๊พธ ๋๋ฉด์ ์ ๋งคํ๊ฒ ์ค๋ฅ๊ฐ ๋๊ธธ๋ ์ด ์ค๋ฅ๋ฅผ ์ฐพ๋๋ฐ ํ์ฐธ์ด ๊ฑธ๋ ธ๋ค . ์ด๊ฒ ๋ญ๋ผ๊ณ !!!!! ๊ฒฐ๋ก ์,, ์ ๋ชฉ ๊ทธ๋๋ก๋ค. Char ๋ฌธ์๋ ๋ฐ๋ก Int๋ก ๋ณํ์ด ์๋๋ค. ์ฆ, "2" ์ type์ด char ๋ผ๋ฉด, String์ผ๋ก ๋ฐ๊พธ๊ณ Int๋ก ๋ฐ๊ฟ์ผ ์ ์์ ์ผ๋ก int๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ค. ์ฌ๊ธฐ์,,, 30๋ถ? 50๋ถ? ์ ๋ ์ค๋ฅ์ฐพ๋๋ค๊ณ ์ฝ๋ ๋ฏ์ด๋ณด๊ณ ์ฝ๋ ์ด๋ฆฌ์ ๋ฆฌ ๋ฐ๊ฟ๋ณด๊ณ ๋๋ฆฌ๋ฅผ ์ณค๋ค ใ กใ ก ์ด์ ์์์ผ๋ ์ ๋๋ก ๊ธฐ์ตํด๋๊ธธ.
var charNum: Character = "2"
Int(charNum)! // โ ์๋ฌ
Int(String(charNum))! // โ
์ด๋ ๊ฒ ๋ฐ๊ฟ์ค์ผ ํ๋ค.
๐ ๋ฌธ์
https://www.acmicpc.net/problem/2529
๐ ๋์ ํ์ด
์ฐ์ ,, ๋ฌธ์ ๋ฅผ ์ฒ์๋ณด๊ณ ์ด๋ป๊ฒ ํ์ด์ผํ๋,, ์ ๋ง ์ด๋ ค์ ๋ค. ์ด๋ป๊ฒ ์ ๊ทผํด์ผํ ์ง ๋ชฐ๋๊ณ , ์ฝ๊ฐ์ ํํธ๋ฅผ ์ฐพ์๋ณด์๋ค. ๊ทธ๋ฅ,, ๋ฐฑํธ๋ํน์ ์ด์ฉํ๋ฉด ์ฌ์ด ๋ฌธ์ ์๊ณ , 0๋ถํฐ 9๊น์ง ๋๋ฉด์ ์ ์ ์ซ์์ ํ์ฌ ๋ถ๋ฑํธ๋ฅผ ๋น๊ตํด๋ณด๋๊ฒ ๋์ด์๋ค.
dfs๋ฅผ ๋๋ด๋ ์กฐ๊ฑด์ depth == n+1 ๋ก ๋์๋ค. ๋ง์ฝ 2๊ฐ ์ ๋ ฅ๋ผ์ ๋ถ๋ฑํธ๊ฐ 2๊ฐ์ด๋ฉด, 3๊ฐ์ ์ซ์๋ฅผ ๋น๊ตํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทผ๋ฐ,,, depth๋ ์ฌ์ค ํ์์๋ค. ๊ทธ๋ฅ ๊ตฌํ๋ ค๋ answer์ ๊ธธ์ด๋ฅผ ๋ณด๋ฉด ๋๋ค!
answer์ ์กฐ๊ฑด์๋ถํฉํ๋ ์ซ์๋ค์ ํ๋์ฉ ๋ถ์ฌ๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด๋๋ค. ํ์ฌ answer์ด "0"์ด๊ณ , ๋น๊ตํ๋ ค๊ณ ํ๋ i ๊ฐ "2", ์ ๋ ฅ๋ฐ์ ๋ถ๋ฑํธ๊ฐ "<"๋ผ๋ฉด "0<2" ๋ฅผ ๋น๊ตํด์ true ๋ฉด visited ์ฒ๋ฆฌํด์ฃผ๊ณ , ๋ค์ ์ํ๋๊ธฐ์ํด์ dfs ์ฌ๊ท๋ฅผ ๋๋ ค์ฃผ๋ฉด ๋๋ค! ์ด ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ ค๋ดค๋ค. (๋๋ง ์ดํดํ ์ ์๋ ๊ทธ๋ฆผ์ผ์๋...?)
(๊ทธ๋ฆผ์๋ depth๊ฐ ์กด์ฌํ๋๋ฐ ์ฝ๋๋ฅผ ์ง๋ค ๋ณด๋๊น depth๊ฐ ๊ณง answer์ ๊ธธ์ด์ ๊ฐ์์ depth ๋งค๊ฐ๋ณ์๋ฅผ ์ญ์ ํ์ฑ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.)
์ ๋ฆฌํด๋ณด์.
- 0๋ถํฐ 9๊น์ง ์ ๋ถ ์ํ (์ต๋๊ฐ, ์ต์๊ฐ ์์๋๋ก ์ถ๋ ฅํด์ผํ๊ธฐ ๋๋ฌธ์ 9๋ถํฐ 0๊น์ง ๋๋ฆด๊ฑฐ์)
- visited[i] ํ์ธ, false์ด๋ฉด answer์ ๋ค์ด๊ฐ ์ ์๋ ์กฐ๊ฑด์ ๊ฐ์ถ๊ฒ!
- i๋ฅผ answer์ ํฉ์ณ์ฃผ๊ธฐ ์ ์ ์ ๋ ฅ๋ฐ์ ๋ถ๋ฑํธ, answer ๋งจ ๋ง์ง๋ง์ ์กด์ฌํ๋ ์ซ์์ ๋น๊ตํด์ ์ ๋นํ์ง ํ๋ณ
- ์๋๋ผ๋ฉด ์๋ฌด์ผ๋ ๋ฒ์ด์ง์ง ์๊ณ ๋ค์ i๋ก ๋๊ฒจ์ฃผ๊ณ , ๋ง์ฝ ์กฐ๊ฑด์ด ๋ถํฉํ๋ค๋ฉด answer์ ํฉ์ณ์ฃผ๊ธฐ
- ๋ง์ฝ answer์ ๊ธธ์ด๊ฐ n+1๊ณผ ๊ฐ๋ค๋ฉด answer์ด ๋ ์ ์๋ ํ๋ณด๋๊น, answerList์ ๋ฃ์ด์ฃผ๊ณ return ํด์ค์ dfs๋ฅผ ๋๋ด์ฃผ๊ธฐ
- 9๋ถํฐ 0๊ฐ์ง ๋๋ฆฐ ๊ฒฐ๊ณผ๋ฌผ์ด answerList์ด๊ธฐ ๋๋ฌธ์ ์ด์ฉ์์์ด ๊ฐ์ฅ ํฐ ์๊ฐ answerList์ ๋งจ์์, ๊ฐ์ฅ ์์์๊ฐ answerList์ ๋งจ๋ค์ ์กด์ฌํ๊ฒ ๋๋ฏ๋ก, ๋งจ์๊ณผ ๋งจ๋ค์์๋ ๊ฒ๋ค์ ์์๋๋ก ์ถ๋ ฅํด์ฃผ์.
๐ ์ ๋ต์ฝ๋
import Foundation
let n = Int(readLine()!)!
let inequality = readLine()!.split(separator: " ").map{ String($0) }
var answer = ""
var answerList = [String]()
var visited = Array(repeating: false, count: 10)
private func check(num1: Int, num2: Int, inequal: String) -> Bool {
if inequal == "<" {
if num1 < num2 {
return true
} else {
return false
}
} else {
if num1 > num2 {
return true
} else {
return false
}
}
}
private func dfs(answer: String) {
if answer.count == n+1 {
answerList.append(answer)
return
}
for i in stride(from: 9, through: 0, by: -1) {
if !visited[i] {
if answer == "" || check(num1: Int(String(Array(answer)[answer.count-1]))!,
num2: i,
inequal: inequality[answer.count-1]) {
visited[i] = true
dfs(answer: answer + String(i))
visited[i] = false
}
}
}
}
dfs(answer: answer)
for i in 0..<2 {
if i == 0 {
print(answerList[i])
} else {
print(answerList[answerList.count-1])
}
}