카테고리 없음

✔ 프로그래머스 - 올바른 괄호 [JAVA]

얘진 2023. 4. 15. 22:27

프로그래머스 > 코딩테스트 연습 > 스택/큐 > 올바른 괄호

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이방법

언어는 자바로 ! 

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        List<Character> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            if (list.size() == 0) {
                list.add(s.charAt(i));
            } else if (list.get(list.size()) == '(' && s.charAt(i) == ')') {
                list.remove(list.size());
            } else {
                list.add(s.charAt(i));
            }
        }
        if (list.size() != 0) {
            answer = false;
        }
        return answer;
    }
}

IndexOutOfBoundsException이 발생했는데, 사유는 List의 size와 index 간의 크기 차이였다.

List에 1개가 add가 되면 List의 size는 1이 되지만, 

add된 인덱스 번호는 0이 되어 get 할 때 0으로 조회한다. 

그렇기에 list에서 get 하거나 remove 할 때 index로 수행하기 때문에 list의 사이즈 

즉 크기로 비교할 때는 -1을 해주어야 한다.

 

 

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;

        List<Character> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            if (list.size() == 0) {
                list.add(s.charAt(i));
            } else if (list.get(list.size() - 1) == '(' && s.charAt(i) == ')') {
                list.remove(list.size() - 1);
            } else {
                list.add(s.charAt(i));
            }
        }
        if (list.size() != 0) {
            answer = false;
        }
        return answer;
    }
}