ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SWEA] S/W 문제해결 기본(4) - 괄호 짝짓기
    Algorithm/SWEA 2020. 4. 18. 16:29

    [1218] 문제 짝짓기

    https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD

    • 4종류 괄호문자들 '(', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.
    • 이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.
    • 괄호의 갯수와 닫히는 순서가 맞아야 한다.

     

    Solution

    • 문자열을 앞에서부터 돌면서 닫히는 문자열이 나오는 경우에 짝이 맞는지 체크

     

     

    소스코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Stack;
    import java.util.StringTokenizer;
     
    public class Solution {
        static int T, n, m, answer;
        static String str;
        static StringTokenizer st;
        static Stack<Character> open;
        static Map<Character, Character> map;
     
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            
            map = new HashMap<>();
            map.put('(',')');
            map.put('{''}');
            map.put('<''>');
            map.put('['']');
            
            T = 0;
            while (T++ < 10) {
                n = stoi(br.readLine());
                str = br.readLine();
                init();            
                System.out.println("#" + T + " " + solve());
            }
     
        }
     
        static int solve() {
            int openCnt = 0, closeCnt = 0;
            char mark;
            for (int i = 0; i < n; i++) {
                mark = str.charAt(i);
                if (mark == '(' || mark == '{' || mark == '[' || mark == '<') {
                    open.add(mark);
                    openCnt++;
                } else {
                    if (map.get(open.pop()) == mark) {
                        closeCnt++;
                    } else {    // 짝이 안 맞으면
                        return 0;
                    }
                }
            }
            return 1;
        }
     
        static void init() {
            open = new Stack<>();
            answer = 1;
        }
     
        static int stoi(String s) {
            return Integer.parseInt(s);
        }
    }
    cs

    댓글

Designed by Tistory.