[백준:11899] 괄호 끼워넣기 (JAVA)

dev_kiiim·2022년 11월 29일
0

CODING TEST

목록 보기
10/23
post-thumbnail

오늘의 1일1코테는,
스터디에서 다른 분이 풀어오신 문제를 다시 풀어보았다.
문제 자체는 그렇게 어렵진 않은 것 같다.

입력값에서 반쪽짜리 괄호들을 하나의 괄호로 만들기 위해 필요한 괄호의 수(cnt)를 구하는 문제였다.


public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    Stack stack = new Stack();
    int cnt = 0;
    String input = br.readLine();

    for(int i=0; i<input.length(); i++){
        if(input.charAt(i) == ')' && stack.isEmpty()){
            cnt++;
            continue;
        }
        if(input.charAt(i) == '('){
            stack.add(input.charAt(i));
        }else if(input.charAt(i) == ')' && !stack.isEmpty()){
            stack.pop();
        }
    }
    if(!stack.isEmpty()){
        cnt += stack.size();
    }
    System.out.println(cnt);
}

입력받은 문자열이 처음부터 닫힌 괄호로 시작하는 경우는 무조건 열린 괄호를 추가해야 하기때문에 cnt를 증가시킨다.

열린 괄호로 시작하는 경우에는 일단 스택에 저장해두고,
이후에 닫힌 괄호가 나올 때 스택에서 삭제를 하기 위해 닫힌 괄호일때 AND로 스택이 비어있지 않은 경우까지 추가하여 구현하였다.
이 부분을 구현하면서 처음부터 닫힌 괄호로 시작하는 경우에도 AND로 스택이 비어있는 경우를 추가해주었다.

입력 문자열을 다 확인했으면 그 때 스택에 남아있는 값들은 닫힌 괄호를 못 만난 반쪽짜리 열린 괄호이므로 cnt에 추가해준다.

0개의 댓글