Skip to content

Commit d0900a7

Browse files
[BaekJoon] 연산자 끼워넣기
1 parent 26be231 commit d0900a7

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import Foundation
2+
3+
_ = readLine()!
4+
let numbers = readLine()!.split(separator: " ").map { Int(String($0))! }
5+
let operators = readLine()!.split(separator: " ").map { Int(String($0))! }
6+
7+
guard operators.count == 4 && operators.reduce(0, +) + 1 == numbers.count else {
8+
exit(-1)
9+
}
10+
11+
func solution(numbers: [Int], operators: [Int]) -> (max: Int, min: Int) {
12+
var result: [Int] = []
13+
dfs(numbers: numbers, index: 1, leftOperators: operators, currentValue: numbers[0], result: &result)
14+
result.sort()
15+
16+
return (max: result.last!, min: result.first!)
17+
}
18+
19+
func dfs(numbers: [Int], index: Int, leftOperators: [Int], currentValue: Int, result: inout [Int]) {
20+
if index == numbers.count {
21+
result.append(currentValue)
22+
return
23+
}
24+
25+
for operatorIndex in 0..<leftOperators.count {
26+
guard leftOperators[operatorIndex] > 0 else { continue }
27+
var nextLeftOperators = leftOperators
28+
nextLeftOperators[operatorIndex] -= 1
29+
30+
switch operatorIndex {
31+
case 0:
32+
dfs(numbers: numbers, index: index + 1, leftOperators: nextLeftOperators, currentValue: currentValue + numbers[index], result: &result)
33+
case 1:
34+
dfs(numbers: numbers, index: index + 1, leftOperators: nextLeftOperators, currentValue: currentValue - numbers[index], result: &result)
35+
case 2:
36+
dfs(numbers: numbers, index: index + 1, leftOperators: nextLeftOperators, currentValue: currentValue * numbers[index], result: &result)
37+
case 3:
38+
dfs(numbers: numbers, index: index + 1, leftOperators: nextLeftOperators, currentValue: currentValue / numbers[index], result: &result)
39+
default:
40+
exit(-2)
41+
}
42+
}
43+
}
44+
45+
let result = solution(numbers: numbers, operators: operators)
46+
print(result.max, result.min, separator: "\n")

0 commit comments

Comments
 (0)