반응형
- 알고리즘 분류 : String, Stack
- 사용 언어 : JAVA
해당 문제는 2가지 방법으로 풀이하였습니다.
소스 설명은 주석을 참고해주세요.
1) Stack을 이용한 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s= br.readLine();
Stack<Character> stack = new Stack<>();
// 레이저 표현 변경 () -> X
s = s.replace("()", "X");
int result = 0; // 조각 갯수
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
// 봉 갯수 추가
if(c == '(') {
stack.add(c);
}
// 봉 갯수 감소 및 조각 갯수에 추가
else if(c == ')'){
stack.pop();
result ++;
}
// 레이저를 만나면 현재 봉의 갯수만큼 조각 갯수에 추가
else if(c == 'X') {
result += stack.size();
}
}
System.out.println(result);
}
}
2) 단순 구현(int)을 이용한 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s= br.readLine();
// 레이저 표현 변경 () -> X
s = s.replace("()", "X");
int num = 0; // 현재 봉의 갯수
int result = 0; // 조각 갯수
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
// 봉 갯수 추가
if(c == '(') {
num++;
}
// 봉 갯수 감소 및 조각 갯수에 추가
else if(c == ')'){
result ++;
num--;
}
// 레이저를 만나면 현재 봉의 갯수만큼 조각 갯수에 추가
else if(c == 'X') {
result += num;
}
}
System.out.println(result);
}
}
반응형
'Algorithm' 카테고리의 다른 글
[BAEKJOON] 17298번 : 오큰수 (JAVA) (0) | 2023.01.15 |
---|---|
[BAEKJOON] 2493번 : 탑 (JAVA) (0) | 2023.01.14 |
[BAEKJOON] 9935번 : 문자열 폭발 (JAVA) (0) | 2023.01.07 |
[BAEKJOON] 4963번 : 섬의 개수 (JAVA) (0) | 2023.01.01 |
[BAEKJOON] 9466번 : 텀프로젝트 (JAVA) (0) | 2022.12.31 |