본문 바로가기

CodingTest Practice

[Codility 문풀] Brackets

Codility 문제 - Brackets

문자열 S를 구성하는 각각의 문자들이 서로 중첩되어 있을 경우 1을, 서로 중첩되어 있지 않을 경우 0을 반환

 

■ 문제 풀이

1) 문풀 설명
- "(", "{", "[", "]", "}", ")"로만 구성된 문자열이 있음
- 문자열의 길이(N)의 범위는 [0...200,000]
- 주어진 문자열의 각 문자가 서로 중첩이 될 경우 1을, 중첩되지 않는 경우가 있을 경우 0을 반환

2) 예제
String S = "{[()()]}" 이 주어진 경우,
"("는 ")"와 중첩, "["는 "]"와 중첩, "{"은 "}"와 중첩하므로 결과 값 1을 반환
String S = "([){}]" 이 주어진 경우에는 중첩하지 않은 경우가 발생하여 0을 반환 


3) 힌트
Stack을 사용

 

import java.util.Stack;

public class Brackets {

    static int solution(String S){
        char[] chars = S.toCharArray();
        Stack stack = new Stack();

        for (int i=0; i<chars.length; i++){
            if (stack.isEmpty()){
                stack.push(chars[i]);
            }else {
                String peek = stack.peek().toString();
                if(peek.equals("(")){
                    if(chars[i] == ')'){
                        stack.pop();
                    }else{
                        stack.push(chars[i]);
                    }
                }else if(peek.equals("{") ){
                    if(chars[i] == '}'){
                        stack.pop();
                    }else{
                        stack.push(chars[i]);
                    }
                }else if(peek.equals("[") ){
                    if(chars[i] == ']'){
                        stack.pop();
                    }else{
                        stack.push(chars[i]);
                    }
                }
            }
        }

        return stack.isEmpty() ? 1:0;
    }

    public static void main(String[] args) {
        String S = "{([)]}";
        System.out.println("brackets 결과 : " + solution(S));
    }
}

 

'CodingTest Practice' 카테고리의 다른 글

[programmers] 로또의 최고 순위와 최저 순위  (0) 2022.01.11
[Codility 문풀] Nesting  (0) 2022.01.10
[codingTest] anagram  (0) 2022.01.07
[Codility 문풀] MaxProductOfThree  (0) 2022.01.06
[Codility 문풀] Distinct  (0) 2022.01.06