문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.
출력
첫째 줄에 정답을 출력한다.
풀이
이 문제는 숫자의 더하기 식에서 괄호를 이용하여 최소값을 구하는 문제이다.
최소값을 구하기 위한 괄호는 빼기 연산이 나왔을 때 그 뒤를 모두 괄호로 묶어서 빼기로 만들어야 한다.
예)
5+10-5+7-8-9+10
5+10-(5+7)-8-(9+10)
결국 맨 처음 빼기 연산자가 나온 이후의 값들은 빼주면 된다.
소스 코드 (go)
package main
import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)
func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	input := scanner.Text()
	result := 0
	tmp := 0
	plusOperator := true
	for _, s := range input {
		if i, err := strconv.Atoi(string(s)); err == nil {
			tmp = tmp * 10 + i
			continue
		}
		if plusOperator {
			result += tmp;
		} else {
			result -= tmp;
		}
		tmp = 0
        // 맨 처음 -가 나온 시점. 이후 들어오는 값은 모두 뺀다
		if plusOperator == true && s == '-' {
			plusOperator = false
		}
	}
	if plusOperator {
		result += tmp;
	} else {
		result -= tmp;
	}
	fmt.Print(result)
}
문제 출처 : www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
반응형
    
    
    
  '공부 > 알고리즘' 카테고리의 다른 글
| [백준] 7568번 덩치 (0) | 2020.11.30 | 
|---|---|
| [백준] 2231번 분해합 (0) | 2020.11.29 | 
| [백준] 11399번 ATM (0) | 2020.11.26 | 
| [백준] 1931번 회의실배정 (0) | 2020.11.24 | 
| [백준] 11047번 동전 0 (0) | 2020.11.23 |