본문 바로가기
Self Dev./Codility

[Codility] Brackets 100%

by 지구 2019. 9. 8.
주 1회 회사 동기들이랑 알고리즘 스터디를 진행하고 있다.
현재 진행하고 있는 스터디는 오프라인 코딩테스트로도 많이 활용하고 있는 Codility.
각자 풀고 자기가 푼 소스를 리뷰하는 형식인데, 뜻 깊고 보람도 있고 참으로 도움이 많이 된다 :)
뛰어나진 않지만 각 단원 별로 100% 만들기 위해 노력 중이고, 기록 및 공유하기 위해 글을 작성한다.
-> 현재 스터디 주제가 nodeJS 로 변경되어, 이 게시물은 마지막 Codility 게시물 입니다..

바로가기   >Codility   >Brackets

 

문제 해석 : 입력받은 String 이 괄호가 잘 닫힌 문자열이면 리턴 1, 아니면 리턴 0 하는 문제

문제 풀이 : String 을 Char 단위로 쪼개서 반복문 돌려서.. stack 으로 풀었다 '-';;

요고 핵심은 괄호의 열림과 닫힘을 체크하려면 "stack" 을 써야한다는 것..?! 🌝

 

import java.util.*;

class Solution {
    public int solution(String S) {
        if (S.length() == 0) { return 1; }
        
        Stack stack = new Stack();
        for (Character value : S.toCharArray()) {
            // startTag 면 스택에 넣음
            if (value.equals('{') || value.equals('[') || value.equals('(')) {
                stack.push(value);
            } else {
                // stack 비어있으면 return 0
                if (stack.empty()) { return 0; }
                
                // endTag 면 스택에서 꺼낸 값과 다르면 return 0
                String popValue = stack.pop().toString();
                /** 와우 Object 를 .toString() 한거라서 == 비교가 아니라 .equals() 로 비교해야 되네.. */
                if (value.equals('}') && !popValue.equals("{")) { return 0; }
                if (value.equals(']') && !popValue.equals("[")) { return 0; }
                if (value.equals(')') && !popValue.equals("(")) { return 0; }
            }
        }
        
        return stack.empty() ? 1 : 0;
    }
}

 

 

반응형

'Self Dev. > Codility' 카테고리의 다른 글

[Codility] Triangle 100%  (0) 2019.09.08
[Codility] Distinct 100%  (0) 2019.09.08
[Codility] MaxProductOfThree 100%  (0) 2019.09.08
[Codility] MinAvgTwoSlice 100%  (0) 2019.09.08
[Codility] PassingCars 100%  (0) 2019.09.08

댓글