코딩테스트

BOJ : 10799

joonwoong 2024. 4. 5. 17:15

1. 문제

 

2. 풀이

막대기를 작은 것부터 큰것 순서로 잘라가면서 풀어야하는게 조금 어려웠는데 범위 정하는 것만 잘하면 간단하게 풀 수 있다.

 

3. 코드

import java.util.Scanner;
import java.util.Stack;

public class Q10799 {
    /**
     *  메모리 22936 KB
     *  시간 380 ms
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        Stack<Character> st = new Stack<>();

        int cnt = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '(') {
                st.push('(');
            } else {
                if (!st.isEmpty() && str.charAt(i-1) == '(') {
                    st.pop();
                    cnt += st.size();
                }
                else {
                    st.pop();
                    cnt++;
                }
            }
        }

        System.out.println(cnt);
    }
}

 

4. 결과

 

5. 소감

처음에 큰 막대기부터 자르는 것으로 시작했는데 문제 조건을 읽어보니 작은 것부터 쪼개야하는 것이었다. 여기서부터 꼬여서 푸는데 어려움이 있었다.

'코딩테스트' 카테고리의 다른 글

BOJ : 4796  (0) 2024.05.22
BOJ : 11899  (0) 2024.04.05
BOJ : 28278  (0) 2024.04.05
BOJ : 5397  (0) 2024.04.04
프로그래머스 : 같은 숫자는 싫어  (0) 2024.03.19