https://www.acmicpc.net/problem/10799
스택 활용 풀이
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 input = br.readLine();
Stack<Character> stack = new Stack<>();
int sumOfChop = 0;
for (int i = 0; i < input.length(); i++) {
//여는 괄호일 때
if(input.charAt(i) == '('){
stack.push('(');
continue; // 할 일 다했으니 continue
}
//닫는 괄호일 때
if(input.charAt(i) == ')'){
stack.pop();
// 1)레이저인 경우, 2)막대가 끊기는 경우
if(input.charAt(i-1) == '('){
sumOfChop += stack.size();
} else{
sumOfChop++;
}
}
}
System.out.println(sumOfChop);
}
}
2시간은 고민했다. 처음에 "잘린 막대의 총 개수 = 레이저와 막대의 접점 수 + 끊긴 지점 수 + 막대를 쌓은 층수" 이런식으로 풀려고 했다. 코드를 3배 길이는 쓰고 5번은 틀렸다. 알고보니 훨씬 더 간단한 방법이 있었다.
막대가 끊길때마다 +1을 해줄 생각을 못했다. 레이저 체크를 이전 인덱스를 확인하는 것으로 깔끔하게 나타냈다. 갈길이 멀다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 17299번 - 오큰등수 (Java 8) (0) | 2022.03.13 |
---|---|
백준 17298번 - 오큰수 (Java 8) (0) | 2022.03.12 |
백준 17413번 - 단어 뒤집기 2(Java 8) (0) | 2022.03.11 |
백준 1406번 - 에디터 (Java 8) (0) | 2022.03.11 |
백준 10866번 - 덱 (Java 8) (0) | 2022.03.11 |
댓글