Stack_쇠 막대기 자르기
✅ 레이저가 쇠막대기를 절단했을 때, 잘린 쇠막대기가 총 몇 개가 되는지 구하시오.
- 레이저는 여는 괄호와 닫는 괄호
()
로 표현된다. - 쇠막대기의 왼쪽 끝은 여는 괄호
(
, 오른쪽 끝은 닫는 괄호)
로 표현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Main {
public int solution(String input){
int answer= 0;
Stack<Character> stack= new Stack<>();
for(int i=0; i<input.length(); i++){
char x= input.charAt(i);
if(x=='(') stack.push(x);
else if(x==')'){
stack.pop();
if(input.charAt(i-1) == '(') answer +=stack.size();//레이저이다
else if(input.charAt(i-1) == ')') answer += 1; //막대기 끝났다
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
String input= sc.next();
System.out.print(T.solution(input));
}
}
//⭐️input:
()(((()())(())()))(())
//⭐️output:
17
//⭐️input:
(((()(()()))(())()))(()())
//⭐️output:
24
(
을 만나면 무조건stack.push()
)
을 만나면String input
을 확인한다.String input
을 확인했을 떄)
바로 앞이 무엇인가?(
인가? 그렇다면 레이저
➡️ 레이저라면, stack가장 위에 있는(
을stack.pop()
➡️ 그리고나서answer +=stack.size()
해서 레이저 앞에서 잘린 쇠막대기 개수 더한다.
(그림에서 초록색))
인가? 그렇다면 쇠막대기가 끝났다는 뜻
➡️ 쇠막대기가 끝났다면, stack가장 위에 있는(
을stack.pop()
➡️ 그리고 쇠막대기 가장 마지막으로 잘린 부분(그림에서 파란 동그라미) 1개 answer에 더해주기
🔵 ThingsILearned
✔️ string의 i 번째 char구하기 String.charAt(i)
This post is licensed under CC BY 4.0 by the author.