알고리즘 문제(Swift)

알고리즘 문제(Swift) - 백준 - 1541 (잃어버린 괄호)

Goniii 2025. 1. 9. 19:35

https://www.acmicpc.net/problem/1541

 

+, -, 양수로 이루어진 식에서 괄호를 이용하여 최소 값을 만드는 문제

‘-’ 부호가 나오면, 다음 ‘-’ 부호 앞까지 괄호로 묶어주면 빼는 수의 값이 최대가 되어 가장 작은 값이 될 것 같음

 

예를 들어

10 + 20 - 30 + 10 + 20 - 30 + 10

→ 10 + 20 - ( 30 + 10 + 20) - (30 + 10)

→ 30 - 60 - 40 = -70

 

→ 입력값의 ‘-’ 부호 기준으로 배열을 나눔

위 예시를 이용하면,

input: “10 + 20 - 30 + 10 + 20 - 30 + 10”

arr = [”10+20”, “30+10+20”, “30+10”]

 

첫 번째 인덱스 값에서 나머지 모든 배열의 값을 빼주면 정답

→ arr[0] - arr[1] - [arr2] ⇒ 정답

30 - 60 - 40 = -70

첫 번째 시도

  1. 입력 값을 ‘-’ 를 기준으로 나누어 배열로 만듦
  2. 해당 배열의 첫 번째 인덱스 값에서 다른 인덱스 값을 모두 빼면 정답!
let arr = readLine()!.split(separator: "-") // '-' 연산자 기준으로 배열을 나눔
var answer = 0     // 출력값
for (index, equation) in arr.enumerated() {
    let sum = equation.split(separator: "+").map{Int($0)!}.reduce(0, +) // 괄호 내 수들의 합
    answer = index == 0 ? sum : answer - sum        // 배열의 첫 번째는 값만 더하고 다음 값들은 모두 빼줌
}

print(answer)