1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
> 의식의 흐름
연산자가 +, -만으로 이루어져 있으니까 -를 기준으로 각각의 합을 구해서 빼면 최소가 나오지 않을까..
> 풀이 과정
1. 식을 입력 받는다.
2. i번째 문자(ch)가 숫자인지 아닌지 판단한다.
- 숫자인 경우
num에 담아둔다.
num *= 10;
num += Integer.parseInt(Character.toString(ch));
- 문자인 경우
'-' 전까지 나온 수들의 합을 구한 후 deque에 담아둔다.
3. 문자열 길이만큼 2번 반복
4. deque에 저장된 첫번째 수에 대해 이후 수들을 뺀다.
5. 4번에서 구한 수를 출력한다.
> 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static Deque<Integer> dq = new ArrayDeque<>();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine(); // 식
int num = 0;
int tmpNum = 0;
for(int i=0;i<input.length();i++){
char ch = input.charAt(i);
if(Character.isDigit(ch)){ // 숫자인 경우
num *= 10;
num += Integer.parseInt(Character.toString(ch));
}
else{ // +,-인 경우
tmpNum += num;
if(ch == '-'){ // -인 경우
dq.addLast(tmpNum);
tmpNum = 0;
}
num = 0;
}
}
dq.addLast(tmpNum+num);
int ans = dq.pollFirst();
while(!dq.isEmpty()){
ans -= dq.pollFirst();
}
bw.write(Integer.toString(ans)+"\n");
bw.flush();
br.close();
bw.close();
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA] 백준 q2212 - 센서 (0) | 2023.10.13 |
---|---|
[JAVA] 백준 q13164 - 행복 유치원 (0) | 2023.10.11 |
[JAVA] 백준 q5639 - 이진 검색 트리 (0) | 2023.10.04 |
[JAVA] 백준 q1991 - 트리 순회 (0) | 2023.09.21 |
[JAVA] 백준 q11725 - 트리의 부모 찾기 (0) | 2023.09.21 |