728x90
이 문제에서 가장 어려웠던 부분은 괄호를 한 번만 쓰냐 여러번 쓰냐의 문제였다...
사실 괄호를 한 번만 쓴다는 조건은 없었지만 나의 문해력이 문제인건지 아니면 그냥 생각을 많이 하고 싶지 않았던 건지...
단 한 번만 사용해서 최소의 값을 만들어야한다는 생각으로 문제를 풀었었다..!
그러니 계속 문제가 안풀리고... 그러다 괄호를 여러번 써도 된다는 걸 깨닫고 풀었다 ;(
이 문제를 풀면서 생각한 논리적 흐름은
- 최소값을 만들기 위해서는 -값이 커야한다.
- -가 붙은 숫자부터 연속된 +가 끝날때까지의 범위를 괄호로 묶어주면(ex. -1+2+3+...+10-11 -> -(1+2+3+...+10)-11)
- 마이너스의 값이 최대가 된다.
- 이처럼 -가 붙은 값부터 다음 -가 나올때까지 전부 같은 배열에 담아주고 더한다.
- 이 때 처음 값은 괄호없이 숫자가 나온다고 했으니 처음시작부터 첫 -가 나오기 전까지의 값은 전부 양수로 더해준다.(first)
- 앞의 양수값 first에 minus를 전부 모은 totalMinus를 빼주면 끝
* 1541번
import Foundation
let input = readLine()!.split(separator: "-").map {String($0)}
let first = input[0].split(separator: "+").map {Int(String($0))!}.reduce(0, +)
var totalMinus = 0
for i in 1 ..< input.count {
let minus = input[i].split(separator: "+").map {Int(String($0))!}
for j in minus {
totalMinus += j
}
}
print(first-totalMinus)
정리(Today I Learned)
- 없음
'TIL > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 Lv. 2 Swift 알고리즘 - 구명보트_그리디 (0) | 2023.02.06 |
---|---|
백준 1931번 Swift 알고리즘 연습 - 회의실 배정_그리디 (0) | 2023.02.06 |
백준 10610번 Swift 알고리즘 연습 - 30_그리디 (0) | 2023.02.04 |
백준 1449번 Swift 알고리즘 연습 - 수리공 항승_그리디 (0) | 2023.02.04 |
백준 4796번 Swift 알고리즘 연습 - 캠핑_그리디 (0) | 2023.02.04 |