728x90
반응형
1. 문제
https://www.acmicpc.net/problem/10799
2. 접근 및 해결
2-1) 접근
알고리즘 분류가 스택인 만큼, 스택을 사용해서 해결했습니다. 그러나 스택을 꼭 사용할 필요는 없습니다!
저는 그래도 스택으로 풀이해봤습니다.
예제1의 예시를 계속 보다보면, 아래의 사진처럼 총 3개의 규칙을 찾을 수 있습니다.
빨간색 박스: 레이저의 닫는 괄호
-> 이 곳에 위치할 때마다 count 변수에 스택의 크기를 더해준다.
초록색 밑줄: 레이저가 아니고, 여는 괄호
-> 그저 stack에 push 하면 되어 보인다!
파란색 기둥: 레이저가 아니고, 닫는 괄호
-> stack에 pop하고 count 변수의 크기를 1 늘린다.
2-2) 해결
위의 접근을 생각하고, 스택의 특징을 떠올리며 해결 방안을 찾아나갔습니다.
1. 현재 값이 "("인 경우, 초록색 밑줄
2. 현재 값이 ")"인데,
2-1) 이전 값이 "("인 경우, 빨간색 박스
2-2) 이전 값이 ")"인 경우, 파란색 기둥
3. 코드(JAVA)
package todayStudy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class n10799 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
String[] sl = s.split("");
Stack<String> st = new Stack<String>();
int count = 0;
for (int i = 0; i < sl.length; i++) {
if(sl[i].equals("(")) {
st.push(sl[i]);
}
else if (sl[i].equals(")")) {
if (sl[i-1].equals("(")) {
st.pop();
count+=st.size();
} else {
st.pop();
count++;
}
}
}
System.out.print(count);
}
}
728x90
반응형
'Study > Algorithm' 카테고리의 다른 글
[BOJ] 백준 2493번: 탑_자바(JAVA) (0) | 2024.02.04 |
---|---|
[BOJ] 백준 1874번: 스택 수열_자바(JAVA) (0) | 2024.02.04 |
[BOJ] 백준 3273번: 두수의 합_자바(JAVA) *정렬, 투포인터 이용하지 않고 풀기 (0) | 2024.02.02 |
[BOJ] 백준 1267번: 핸드폰 요금_자바(JAVA) (0) | 2024.02.01 |
[BOJ] 백준 2480번: 주사위 세개_자바(JAVA) (1) | 2024.01.30 |