요구능력 : 백트래킹과 문자열
코드설명 :
연산자를 배열에 다 넣어준다.
var temp = [Character]()
var operArr = operandArr
for i in 0..<4{
while operArr[i] >= 1 {
if i == 0{
temp.append("+")
operArr[i] -= 1
}else if i == 1{
temp.append("-")
operArr[i] -= 1
}else if i == 2{
temp.append("*")
operArr[i] -= 1
}else if i == 3{
temp.append("/")
operArr[i] -= 1
}
}
}
연산자를 백트래킹 하면서 경우의수를 모두 계산해준다.
func dfs(_ depth: Int){
var p = 1
var result = arr[0]
if depth == temp.count{
for i in resultArr{
if i == "+"{
result += arr[p]
p = p + 1
}else if i == "-"{
result -= arr[p]
p = p + 1
}else if i == "*"{
result *= arr[p]
p = p + 1
}else if i == "/"{
result /= arr[p]
p = p + 1
}
}
maxResult = max(result, maxResult)
minResult = min(result, minResult)
return
}
for i in 0..<temp.count{
if !visited[i] {
visited[i] = true
resultArr.append(temp[i])
dfs(depth + 1)
visited[i] = false
resultArr.removeLast()
}
}
}
후기 : 처음 문제를 보면 어려워보일 수 있지만 풀어나가면 쉬운문제
나는 처음에 수를 백트래킹하다가 어딘가 이상해서 연산자를 백트래킹하는 걸로 갈아탔다.
let n = Int(String(readLine()!))!
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
let operandArr = readLine()!.split(separator: " ").map{Int(String($0))!}
var resultArr = [Character]()
var visited = Array(repeating: false, count: n + 1)
var maxResult = -999999999
var minResult = Int.max
var temp = [Character]()
var operArr = operandArr
for i in 0..<4{
while operArr[i] >= 1 {
if i == 0{
temp.append("+")
operArr[i] -= 1
}else if i == 1{
temp.append("-")
operArr[i] -= 1
}else if i == 2{
temp.append("*")
operArr[i] -= 1
}else if i == 3{
temp.append("/")
operArr[i] -= 1
}
}
}
func dfs(_ depth: Int){
var p = 1
var result = arr[0]
if depth == temp.count{
for i in resultArr{
if i == "+"{
result += arr[p]
p = p + 1
}else if i == "-"{
result -= arr[p]
p = p + 1
}else if i == "*"{
result *= arr[p]
p = p + 1
}else if i == "/"{
result /= arr[p]
p = p + 1
}
}
maxResult = max(result, maxResult)
minResult = min(result, minResult)
return
}
for i in 0..<temp.count{
if !visited[i] {
visited[i] = true
resultArr.append(temp[i])
dfs(depth + 1)
visited[i] = false
resultArr.removeLast()
}
}
}
dfs(0)
print(maxResult)
print(minResult)
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][BruteForce] 백준 2003번 (수들의 합 2) (0) | 2021.12.28 |
---|---|
[Swift][BruteForce] 백준 15658번 (연산자 끼워넣기 (2)) (0) | 2021.12.27 |
[Swift][DP] 백준 15989번 (1, 2, 3 더하기 4) (0) | 2021.12.18 |
[Swift][Math] 백준 1339번 (단어 수학) (0) | 2021.12.17 |
[Swift][BFS][DFS] 백준 14502번 (연구소) (0) | 2021.12.16 |
댓글