https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
문제 접근
못품
[ 참조 ] https://steady-coding.tistory.com/10
굳이 평소 하던 방식처럼 stringTokenizer로(물론 여기선 stringTokenizer 못씀.띄어쓰기 안되있.) 하나씩 끊어서 순차적으로 다음거 처리하지 x. 이전에 나온 괄호도 봐야
->String으로 받아서 charAt(i)
코드
스택 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Deque<Character> stack = new ArrayDeque<>();
int count = 0;
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stack.addFirst(input.charAt(i));
continue;
}
if (input.charAt(i) == ')') {
stack.pollFirst();
if (input.charAt(i - 1) == '(') { // 레이저
count += stack.size();
} else {
count++;
}
}
}
System.out.println(count);
}
}
스택 사용 x
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 input = br.readLine();
int count = 0;
int stick = 0;
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stick++;
continue;
}
if (input.charAt(i) == ')') {
stick--;
if (input.charAt(i - 1) == '(') { // 레이저
count += stick;
} else {
count++;
}
}
}
System.out.println(count);
}
}
'백준' 카테고리의 다른 글
DP #1699: 제곱수의 합[JAVA] (0) | 2023.07.05 |
---|---|
DP #1912: 연속합 [JAVA] (0) | 2023.06.26 |
이런저런 문제들 #10845: 큐 [JAVA] (0) | 2023.06.23 |
DP #11054: 가장 긴 바이토닉 부분 수열 [JAVA] (0) | 2023.06.21 |
이런저런 문제들 #9012: 괄호 [JAVA] (0) | 2023.06.19 |