Algorithm/Algorithm Problem
백준 1541번: 잃어버린 괄호 (Python/Java)
주유소짜글이
2022. 1. 24. 23:34
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
접근
괄호를 묶는다는 의미만 알면 쉽게 풀 수 있는 문제다. 다들 알다시피 수학에서 괄호는 '먼저 계산한다'는 뜻이다. 그렇다면 덧셈이 있는 곳에 괄호를 쳐 숫자들을 더해준다면 나중에 뺄 때는 숫자 한 개를 뺄 때보다 훨씬 더 큰 수를 뺄 수 있게 된다. 즉, 가장 작은 수를 만들 수 있다.
구현 또한 간단하다. '-'를 기준으로 나눠준다. 그리고 그 나눠진 문자열을 다시 '+'를 기준으로 나눠준다. '+'를 기준으로 나눠서 나온 숫자들을 다 더한다. 나눠준 모든 문자열의 숫자들을 더해준다. 이제 이렇게 나온 숫자 중 가장 첫 번째 나온 숫자에 나머지 숫자를 모두 빼주면 해당 계산을 구현할 수 있게 된다.
풀이
Python
testcase = (input()).split('-')
board = []
for i in range(len(testcase)):
subSum = 0
for j in range(len(testcase[i].split('+'))):
subSum += int(testcase[i].split('+')[j])
board.append(subSum)
result = board[0]
for i in range(1, len(board)):
result -= board[i]
print(result)
Java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] testcase = (scan.nextLine()).split("-");
int result = 0;
for(int i = 0 ; i < testcase.length ; i++){
int subSum = 0;
for(int j = 0 ; j < (testcase[i].split("\\+")).length ; j++){
subSum += Integer.parseInt(testcase[i].split("\\+")[j]);
}
if(i == 0){
result = subSum;
}else {
result -= subSum;
}
}
System.out.println(result);
}
}