728x90
어렵게 생각한 부분이 있는데..
문제에서 주어진 예제에서 0(0)인 경우에 0이 나오는 것을 보고
(0)이 나오면 앞에 K(Q)형태에서 K값이 어떤 값이든 0이 나오는 것으로 착각했다..
이것 때문에 경우의 수 엄청 늘어나는 것 같아서
index를 i=1부터 시작하고 i<arr.length-1로 하고 난리도 아니었는데
문제에서 주어진 0-9의 숫자는 문자라는 것을 간과하고 말았다..
0(0)에서 0이 나온 이유가 K값이 0이기 때문에 0이 나온 것이었음
실수1. Stack을 제대로 활용 안해서 divide zero오류가 났음
새로 갱신된 unit은 unitSt 스택에 저장해주어야함
실수2. Line:26 char형을 그대로 넣음 ( [char변수] -'0' 을 꼭 해주어야함 ^^ )
unitSt.push(unitSt.peek()*arr[i-1]); (X)
unitSt.push(unitSt.peek()*(arr[i-1]-'0')); (O)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException{
char[] arr = br.readLine().toCharArray();
Stack<Integer> unitSt = new Stack<>();
unitSt.push(1);
int res = 0;
for (int i=0; i<arr.length; i++) {
if(arr[i]=='(') {
res-=unitSt.peek();
unitSt.push(unitSt.peek()*(arr[i-1]-'0'));
}
else if(arr[i]==')') {
unitSt.pop();
}
else {
res+=unitSt.peek();
}
}
System.out.println(res);
/*Stack<Integer> unitSt = new Stack<>();
unitSt.push(1);
char last = arr[arr.length-1];
int res = (arr.length>=2 && ('0'<=last && last<='9'))?2:1;
for(int i=1; i<arr.length-1; i++) {
// K(Q)
if(arr[i]=='(') {
res -= unitSt.peek();
int tempUnit = (arr[i-1]-'0')*unitSt.peek();
unitSt.push(tempUnit);
}
else if(arr[i]==')')
unitSt.pop();
else if(arr[i-1]=='(' && arr[i]=='0' && arr[i+1]==')') // (0)은 0이다..
continue;
else
res += unitSt.peek();
}
System.out.println(res);*/
// bw.write("");
// bw.flush();
// bw.close();
}
private static int stoi(String input) {
return Integer.parseInt(input);
}
}
|
cs |
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준][Java] 15685번 드래곤 커브 (구현) (0) | 2022.03.18 |
---|---|
[백준][Java] 14719번 빗물 (시뮬레이션) #2 (0) | 2021.10.22 |
★★ [백준][Java] 2304번 창고 다각형 (시뮬레이션) (0) | 2021.10.22 |
[백준][Java] 2745번 진법 변환 (문자열) (0) | 2021.10.21 |
★ [백준][Java] 2470번 두 용액 (이진탐색) (0) | 2021.10.18 |