JAVA/알고리즘

올바른 괄호 여부 검사

lovineff 2021. 5. 24. 17:03

괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

▣ 입력설명
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
▣ 출력설명
첫 번째 줄에 YES, NO를 출력한다.
▣ 입력예제 1
(()(()))(()
▣ 출력예제 1
NO

 

private static boolean soulution(String str) {
    String[] split = str.split("");

    for (int i = 0; i < split.length; i++) {
        // 우괄호인 경우 좌측 문자중 가장 가까운 좌괄호를 찾는다.
        if(")".equals(split[i])){
            for (int j = i; j >= 0; j--) {
                // 가장 가까운 위치에 있는 좌괄호가 있는 경우 공백으로 변경하여, 매칭되었다고 표시한다.
                if("(".equals(split[j])){
                    split[i] = "";
                    split[j] = "";
                    break;
                }
            }
        }
    }

    // 공백이 아닌 문자가 있는 경우(괄호가 매칭되지 않은 경우) 괄호가 비정상이다.
    Optional<String> any = Arrays.stream(split).filter(s -> !"".equals(s)).findAny();

    return !any.isPresent();
}

public static void main(String[] args) {
    String str = "(()(()))(()";
//        String str = "(())()";
//        String str = "(()()))";
    boolean soulution = soulution(str);
    System.out.println(soulution);
}

'JAVA > 알고리즘' 카테고리의 다른 글

쇠막대기 자르기 (괄호)  (0) 2021.06.02
크레인 인형뽑기(카카오)  (0) 2021.05.25
학급 회장 구하기(Map 사용)  (0) 2021.05.24
공통원소 구하기(배열 2개)  (0) 2021.05.24
두 배열 합치기  (0) 2021.05.24