Post

Stack_쇠 막대기 자르기

✅ 레이저가 쇠막대기를 절단했을 때, 잘린 쇠막대기가 총 몇 개가 되는지 구하시오.

Screenshot 2024-05-13 at 14 17 11

  • 레이저는 여는 괄호와 닫는 괄호 ()로 표현된다.
  • 쇠막대기의 왼쪽 끝은 여는 괄호(, 오른쪽 끝은 닫는 괄호)로 표현
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

코딩공책-40

  1. (을 만나면 무조건 stack.push()
  2. )을 만나면 String input을 확인한다.
  3. String input을 확인했을 떄 )바로 앞이 무엇인가?
  4. (인가? 그렇다면 레이저
    ➡️ 레이저라면, stack가장 위에 있는 (stack.pop()
    ➡️ 그리고나서 answer +=stack.size() 해서 레이저 에서 잘린 쇠막대기 개수 더한다.
    (그림에서 초록색)
  5. )인가? 그렇다면 쇠막대기가 끝났다는 뜻
    ➡️ 쇠막대기가 끝났다면, stack가장 위에 있는 (stack.pop()
    ➡️ 그리고 쇠막대기 가장 마지막으로 잘린 부분(그림에서 파란 동그라미) 1개 answer에 더해주기

🔵 ThingsILearned

✔️ string의 i 번째 char구하기 String.charAt(i)

This post is licensed under CC BY 4.0 by the author.