반응형
문제
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] 이다.
여기서는 첫번째 원소에서 그 뒤의 원소들을 모두 빼주면 최소값이다.
반응형
'⚙️ 알고리즘 > 백준' 카테고리의 다른 글
[백준/Swift] 2346 - 풍선 터뜨리기 (0) | 2023.03.21 |
---|---|
[Swift] 백준 1080 - 행렬 (0) | 2023.01.27 |
[Swift] 백준 10610 - 30 (0) | 2023.01.26 |
[Swift] 백준 2895 - 대회 or 인턴 (0) | 2023.01.26 |
[백준/파이썬] 2869 - 달팽이는 올라가고싶다 (0) | 2021.04.25 |