⚙️ 알고리즘/백준

[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] 이다.

여기서는 첫번째 원소에서 그 뒤의 원소들을 모두 빼주면 최소값이다.

반응형