본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 괄호 변환

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

 

프로그래머스

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

programmers.co.kr

올바르지 않은 괄호를 올바르게 만드는 문제

for (int i = 0; i < p.length(); i++) {
            u.append(p.charAt(i));
            int a = 0;
            int b = 0;
            for (int j = 0; j < u.length(); j++) {
                if (u.charAt(j) == '(') {
                    a++;
                } else {
                    b++;
                }
            }
            if (a == b) {
                break;
            }
        }

일단 괄호의 개수가 알맞는지를 확인

public boolean check(String p) {
        int number = 0;
        for (int i = 0; i < p.length(); i++) {
            if (p.charAt(i) == '(') number++;
            else number--;
            if (number < 0) {
                return false;
            }
        }
        return true;
    }

괄호가 올바르게 있는지를 체크

if (check(u.toString())) {
            u.append(solution(v.toString()));
            return u.toString();
        } else {
            sb.append("(");
            sb.append(solution(v.toString()));
            sb.append(")");
            for (int i = 1; i < u.length() - 1; i++) {
                if (u.charAt(i) == '(') {
                    sb.append(")");
                } else {
                    sb.append("(");
                }
            }
        }
        return sb.toString();

false라면 괄호를 올바르게 바꾸어주기

class Solution {
    public String solution(String p) {
        StringBuilder sb = new StringBuilder();
        StringBuilder u = new StringBuilder();
        if (p.length() == 0) {
            return p;
        }
        for (int i = 0; i < p.length(); i++) {
            u.append(p.charAt(i));
            int a = 0;
            int b = 0;
            for (int j = 0; j < u.length(); j++) {
                if (u.charAt(j) == '(') {
                    a++;
                } else {
                    b++;
                }
            }
            if (a == b) {
                break;
            }
        }
        StringBuilder v = new StringBuilder(p.substring(u.length()));
        if (check(u.toString())) {
            u.append(solution(v.toString()));
            return u.toString();
        } else {
            sb.append("(");
            sb.append(solution(v.toString()));
            sb.append(")");
            for (int i = 1; i < u.length() - 1; i++) {
                if (u.charAt(i) == '(') {
                    sb.append(")");
                } else {
                    sb.append("(");
                }
            }
        }
        return sb.toString();
    }

    public boolean check(String p) {
        int number = 0;
        for (int i = 0; i < p.length(); i++) {
            if (p.charAt(i) == '(') number++;
            else number--;
            if (number < 0) {
                return false;
            }
        }
        return true;
    }
}