처음 제출햇던 버전
import java.io.*;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.ArrayBlockingQueue;
public class Main {
public static void main(String args[]) throws IOException, InterruptedException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
String[] input = reader.readLine().split("");
int output = 0;
Stack<String> stickStack = new Stack<>();
for(int i = 0; i < input.length; i++){
String nowStr = input[i];
String nxtStr = input[Math.min(i+1, input.length-1)];
// 열린 괄호가 나오면 다음 문자가 닫힌 괄호인지 체크하고(두개가 세트이기 때문에)
// 다음 문자가 닫힌 괄호이면 stack 사이즈만큼 더해준 후 다음 문자 턴은 스킵
if(nowStr.equals("(") && nxtStr.equals(")")){
output += stickStack.size();
i++;
}else if(nowStr.equals("(")){
// 단독 열린 괄호 = 쇠막대기 추가임으로 스택에 push
stickStack.push(nowStr);
}else if(nowStr.equals(")")){
// 닫힌 괄호는 쇠막대기 끝을 의미, pop후 나머지 꼬다리를 더해주기위해 ++
stickStack.pop();
output++;
}
}
writer.write(output + "\n");
reader.close();
writer.flush();
writer.close();
}
}
찾아보니까 좀더 빠르고 메모리 덜 잡아 먹는 코드가 있어서
비교해보니
1.일단 writer없이 그냥 sout으로 출력
2.String배열 대신 Character 배열 사용
수정본
import java.io.*;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.ArrayBlockingQueue;
public class Main {
public static void main(String args[]) throws IOException, InterruptedException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
char[] input = reader.readLine().toCharArray();
int output = 0;
Stack<Character> stickStack = new Stack<>();
for(int i = 0; i < input.length; i++){
char nowStr = input[i];
char nxtStr = input[Math.min(i+1, input.length-1)];
// 열린 괄호가 나오면 다음 문자가 닫힌 괄호인지 체크하고(두개가 세트이기 때문에)
// 다음 문자가 닫힌 괄호이면 stack 사이즈만큼 더해준 후 다음 문자 턴은 스킵
if(nowStr == '(' && nxtStr == ')'){
output += stickStack.size();
i++;
}else if(nowStr == '('){
// 단독 열린 괄호 = 쇠막대기 추가임으로 스택에 push
stickStack.push(nowStr);
}else if(nowStr == ')'){
// 닫힌 괄호는 쇠막대기 끝을 의미, pop후 나머지 꼬다리를 더해주기위해 ++
stickStack.pop();
output++;
}
}
System.out.println(output + "\n");
reader.close();
}
}

메모리 시간 다 딱 1/3씩 줄었다.
'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [백준] 17299번 오등큰수 JAVA (0) | 2021.04.13 |
|---|---|
| [백준] 17298번 JAVA (0) | 2021.04.11 |
| [백준] 17413번 JAVA (0) | 2021.04.01 |
| [백준] 1158번 JAVA 요세푸스 (0) | 2021.03.31 |
| [백준] 1406번 JAVA (0) | 2021.03.30 |