⚙️ 알고리즘/백준
[Swift] 백준 1541 - 잃어버린 괄호
dev_zoe
2023. 1. 26. 00:46
반응형
문제
https://www.acmicpc.net/problem/1541
코드
var array = readLine()!.split(separator: "-").map { String($0) }
array = array.filter { $0 != "" } //공백제거
var sum = 0
var count = 0
var sum_array:[Int] = []
for i in array {
count = i.split(separator:"+").map { Int($0)!}.reduce(0, +)
sum_array.append(count)
}
if sum_array.count == 1 { // "+"만 있는 경우 -> 위에서 array의 count가 1이기 때문에 더한 값이 있는 배열의 크기도 1임
print(sum_array.first!)
}
else{ // "-"가 1개라도 있는 경우
count = 0
for i in 1...sum_array.count-1{
count += sum_array[i]
}
print(sum_array.first! - count)
}
풀이
'-' 가 있는 경우, 첫번째 값 이후의 모든 값을 더하여 빼는 것이 곧 최소값이다.
반대로 '-'없이 '+'만 있을 때에는, 해당 값을 모두 더하기만 하면 그 값이 곧 최소값이라고 할 수 있다.
일단 '-'로 자르고난 배열에서 원소마다 "+"를 제거한 값을 모두 더한 값을 각각 일시 sum_array에 담아주었다.
1) "+" 만 있는 경우
예제2의 10+20+30+40의 경우,
array = ["10+20+30+40"] 이며 sum_array는 [100]이다.
따라서 이때는 해당 원소를 출력하면 된다.
2) "-"가 하나라도 존재하는 경우
55-50+40-90+60 와 같은 예시의 경우
array = ["55", "50+40", "90+60"] 이며 sum_array는 [55, 90, 150] 이다.
여기서는 첫번째 원소에서 그 뒤의 원소들을 모두 빼주면 최소값이다.
반응형