-
[SWEA] S/W 문제해결 기본(4) - 괄호 짝짓기Algorithm/SWEA 2020. 4. 18. 16:29
[1218] 문제 짝짓기
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD
- 4종류 괄호문자들 '(', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.
- 이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.
- 괄호의 갯수와 닫히는 순서가 맞아야 한다.
Solution
- 문자열을 앞에서부터 돌면서 닫히는 문자열이 나오는 경우에 짝이 맞는지 체크
소스코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import 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 'Algorithm > SWEA' 카테고리의 다른 글
[SWEA] 입국심사 (0) 2020.04.25 [SWEA] S/W 문제해결 기본(4) - 길찾기 (0) 2020.04.18 [SWEA] S/W 문제해결 기본(4) - 거듭제곱 (0) 2020.04.18 [SWEA] S/W 문제해결 기본(3) - 회문 2 (0) 2020.04.16 [SWEA] S/W 문제해결 기본(3) - 회문 1 (0) 2020.04.16