문제 5 :
출처 - https://www.acmicpc.net/problem/10799
소스코드1 :
import java.util.*;
class Main {
public int solution(String str) {
int answer = 0;
boolean laser = false;
Stack<Character> stack = new Stack<>();
for(char x : str.toCharArray()) {
if (x == '(') {
stack.push(x);
laser = true;
}
else {
// 레이저 발사
if (laser == true) {
stack.pop();
answer += stack.size();
laser = false;
}
// 막대기 하나 끊기
else {
stack.pop();
answer++;
}
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}
그런데 굳이 이렇게 boolean으로 레이저인지 막대기 끊기인지 판별하지 않고
인덱스로 판별하는 방법이 코드가 더 깔끔하다.
소스코드2 :
import java.util.*;
class Main {
public int solution(String str) {
int answer = 0;
boolean laser = false;
Stack<Character> stack = new Stack<>();
for(int i=0; i<str.length(); i++) {
if (str.charAt(i) == '(') stack.push('(');
else {
stack.pop();
if (str.charAt(i-1) == '(') answer += stack.size();
else answer++;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}
'Java 코딩테스트 공부 > Java 알고리즘 공부' 카테고리의 다른 글
Java 스택, 큐 알고리즘5 + deque (0) | 2022.08.20 |
---|---|
Java 스택, 큐 알고리즘4 + 빠른 입출력 (0) | 2022.08.17 |
Java 스택, 큐 알고리즘2 (0) | 2022.08.15 |
Java 스택, 큐 알고리즘1 (0) | 2022.08.14 |
Java HashMap, TreeSet 알고리즘2 (0) | 2022.08.13 |