룬아님의 취중코딩

Codility 18번 Brackets 본문

개발/알고리즘

Codility 18번 Brackets

룬아님 2019. 9. 2. 20:43

Brackets

 

A string S consisting of N characters is considered to be properly nested if any of the following conditions is true:

  • S is empty;
  • S has the form "(U)" or "[U]" or "{U}" where U is a properly nested string;
  • S has the form "VW" where V and W are properly nested strings.

For example, the string "{[()()]}" is properly nested but "([)()]" is not.

Write a function:

class Solution { public int solution(String S); }

that, given a string S consisting of N characters, returns 1 if S is properly nested and 0 otherwise.

For example, given S = "{[()()]}", the function should return 1 and given S = "([)()]", the function should return 0, as explained above.

Write an efficient algorithm for the following assumptions:

  • N is an integer within the range [0..200,000];
  • string S consists only of the following characters: "(", "{", "[", "]", "}" and/or ")".

    Copyright 2009–2019 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

 

import java.util.*;

class Solution {
    public int solution(String S) {
        Stack<Character> st = new Stack<Character>();

        for (int i = 0; i < S.length(); i++) {
            if (S.charAt(i) == '(' || S.charAt(i) == '[' || S.charAt(i) == '{') {
                st.push(S.charAt(i));
            } else if (S.charAt(i) == ')') {
                if (st.size() > 0) {
                    if (st.pop() != '(') {
                        return 0;
                    }
                } else {
                    return 0;
                }
            } else if (S.charAt(i) == ']') {
                if (st.size() > 0) {
                    if (st.pop() != '[') {
                        return 0;
                    }
                } else {
                    return 0;
                }
            } else if (S.charAt(i) == '}') {
                if (st.size() > 0) {
                    if (st.pop() != '{') {
                        return 0;
                    }
                } else {
                    return 0;
                }
            }
        }

        if (st.size() > 0) {
            return 0;
        } else {
            return 1;
        }
    }
}

 

https://app.codility.com/demo/results/trainingTZ5WHB-8QY/

반응형

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

Codility 21번 StoneWall  (0) 2019.09.09
Codility 19번 Fish  (0) 2019.09.09
Codility 17번 NumberOfDiscIntersections  (0) 2019.09.01
Codility 16번 Triangle  (0) 2019.09.01
Codility 13번 MinAvgTwoSlice  (0) 2019.08.28
Comments