๋ฐฑ์ค - 0 ๋ง๋ค๊ธฐ(Swift)
2022. 11. 16. 15:29ใAlgorithm
๋ฐฑ์ค - 0 ๋ง๋ค๊ธฐ(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/7490
๋์ ํ์ด
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ ์คํธ์ผ์ด์ค์ N์ ๋ฒ์๊ฐ 10์ดํ์ธ ๊ฒ์ ํ์ธํ๊ณ +, -, ๊ณต๋ฐฑ 3๊ฐ์ง์ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ DFS๋ก ์ฌ๊ท๋ฅผ ๋๋ ค์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ตฌํ์ ํ๋ค๊ฐ ํ์ด์ฌ์ evalํจ์๊ฐ ์ค์ํํธ์๋ ๋ฐ๋ก ๋ด์ฅ๋์ด์์ง ์์์ ์ด๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ ์ง ๊ณ ๋ฏผํด์ผํ๋ค.
๊ทธ๋์ ์ซ์๊ฐ ์๋๊ฒ๋ค๊ณผ ์ซ์์ธ ๊ฒ๋ค๋ก ๋ถ๋ฆฌ๋ฅผ ์ํจ ๋ค ์คํ์ ์ ์ฅํด์ ์ฐ์ฐ์ ํ๋๋ก ํ๋ค.
๋ง์ง๋ง์ผ๋ก ์์คํค์ฝ๋ ์์ผ๋ก ์ถ๋ ฅ์ด๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ result๋ฅผ ์ ์ญ๋ณ์๋ก ๋ค๋ค์ ์ ๋ ฌํ ์ ์๊ฒ๋ ํ๋ค.
import Foundation
let tc = Int(readLine()!)!
var result: [String] = []
for _ in 0..<tc {
let N = Int(readLine()!)!
let arr = Array(1...N)
DFS(1, "1", arr)
result.sort(by: <) // ์์คํค์ฝ๋ ์์๋ฅผ ์ํด ์ ๋ ฌ
result.forEach { print($0) }
print()
result = []
}
func DFS(_ L: Int, _ str: String, _ arr: [Int]) {
if L == arr.count { // ๋์ ๋๋ฌํ๋ค๋ฉด
var stack: [Int] = [] // ๊ณ์ฐํ ๊ณต๊ฐ
var str2 = str.replacingOccurrences(of:" ", with:"") //๊ณต๋ฐฑ์ ์์ ์ ์ซ์๋ฅผ ๋ถ์ฌ์ค๋ค.
let nums = str2.split(whereSeparator: { !$0.isNumber })
let seps = str2.split(whereSeparator: { $0.isNumber })
var i = 0
for x in nums {
if stack.isEmpty {
stack.append(Int(x)!)
} else {
let last = stack.removeLast()
if seps[i] == "+" {
stack.append(last+Int(x)!)
} else {
stack.append(last-Int(x)!)
}
i += 1
}
}
if stack.last! == 0 { // ์ฐ์ฐํ ๊ฐ์ด 0์ด๋ผ๋ฉด
result.append(str)
}
} else {
DFS(L+1, str + "+\(arr[L])", arr)
DFS(L+1, str + "-\(arr[L])", arr)
DFS(L+1, str + " \(arr[L])", arr)
}
}
\
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ์นํจ๋ฐฐ๋ฌ(Swift) (0) | 2022.11.18 |
---|---|
๋ฐฑ์ค - ํฑํํ (Swift) (0) | 2022.11.16 |
๋ฐฑ์ค - ๋น๋ฐํธ์(Swift) (0) | 2022.11.15 |
๋ฐฑ์ค - ๋น๋ฌผ(Swift) (0) | 2022.11.15 |
๋ฐฑ์ค - ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด(Swift) (0) | 2022.11.14 |