백준 10799 쇠막대기
https://www.acmicpc.net/problem/10799
문제해결
레이저인지 쇠막대기인지 구분하는 것이 포인트이다. 괄호가 인접해있을 경우 () 레이저, 그렇지 않을 경우 쇠막대기이다. 레이저일 경우 스택 사이즈만큼 더해주고 쇠막대기일 경우 1을 더해준다. 스택으로 구현하였는데 스택을 이용하지 않고 괄호 문제처럼 카운트해서 풀 수도 있다.
- 조각 개수에 대한 sum 변수 선언
- 열린 괄호 '(' 일 경우 스택에 추가
- 닫힌 괄호 ')' 일 경우
- 이전 값과 비교했을 때 '(' 일 경우 레이저 -> 스택 사이즈만큼 더하기
- 이전 값과 비교했을 때 ')' 일 경우 쇠막대기 -> 1 더하기
소스코드
import java.util.Scanner;
import java.util.Stack;
public class b10799 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
Stack<Integer> stack = new Stack<>();
int sum = 0; // 조각 개수
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stack.push(i);
} else { // 닫힌 괄호 )
if (input.charAt(i-1)=='(') { // 이전 문자가 ( 일 경우 레이저
stack.pop();
sum += stack.size();
} else { // 이전 문자가 ) 일 경우 쇠막대기
stack.pop();
sum += 1;
}
}
}
System.out.println(sum);
}
}
Author And Source
이 문제에 관하여(백준 10799 쇠막대기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@im_lily/백준-10799-쇠막대기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)