기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - SWEA/D4

[SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java)

2024. 1. 2. 00:21

[D4] [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 - 1218

문제 링크

성능 요약

메모리: 19,088 KB, 시간: 103 ms, 코드길이: 1,789 Bytes

제출 일자

2024-01-02 00:18

풀이 방법

1. 괄호를 체크하는 것

2. 앞 괄호와 뒤 괄호를 나누어준다.

3. 문자를 받아서 앞 괄호를 받는다면 스택에 넣어준다.

4. 뒤 괄호를 받는다면 스택에 마지막으로 넣은 괄호(peek)가 대칭 하는지 확인 후 아니라면 false를 리턴한다.

 

풀이 코드

import java.util.Stack;
import java.io.InputStreamReader;
import java.io.BufferedReader;

class Solution {
    static char[] front = {'(','[','{','<'};
    static char[] rear = {')',']','}','>'};
	public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
		for(int tc = 1; tc <= 10; tc++) {
            int len = Integer.parseInt(br.readLine());
            String line = br.readLine();
            sb.append("#" + tc + " " + (validText(len,line) ? "1" : "0")).append("\n");
		}
        System.out.println(sb);
	}
    private static boolean validText(int len, String text){
        Stack<Character> stack = new Stack<>();
        boolean isFront;
        for(int i = 0 ; i < len; i++){
            char ch = text.charAt(i);
            isFront = true;
            
            // 뒤 괄호인 경우 기존 스택의 앞에 있는지 확인한다.
            for(int j = 0; j < 4; j++){
                // 뒤에 있는 괄호를 발견한 경우
                if(ch == rear[j]){
                    // 스택이 비어있거나 stack의 탑이 현재 앞 괄호와 다른 경우 숏컷으로 종료
                    if(stack.isEmpty() || stack.peek() != front[j]){
                        return false;
                    }
                    // 동일한 경우 빼준 뒤 Front가 아니라고 체크
                    else{
                        stack.pop();
                        isFront = false;
                    }
                    break;
                }
            }
            
            // ch가 앞괄호라면 push해줌
            if(isFront){
                stack.push(ch);
            }
        }
        // 모든 연산이 끝난 후 Stack가 비어있어야 올바른 경우
        return stack.isEmpty();
    }
}

출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do

'알고리즘 - SWEA > D4' 카테고리의 다른 글

[SW expert Academy] SWEA 1227번 미로2 자바(Java)  (0) 2024.01.02
[SW expert Academy] SWEA 1219번 길찾기 자바(Java)  (0) 2024.01.02
[SW expert Academy] SWEA 1211번 Ladder2 자바(Java)  (0) 2023.12.30
[SW expert Academy] SWEA 7465번 창용 마을 무리의 개수 자바(Java)  (0) 2023.12.27
[SW expert Academy] SWEA 1868번 파핑파핑 지뢰찾기 자바(Java)  (0) 2023.11.18
    '알고리즘 - SWEA/D4' 카테고리의 다른 글
    • [SW expert Academy] SWEA 1227번 미로2 자바(Java)
    • [SW expert Academy] SWEA 1219번 길찾기 자바(Java)
    • [SW expert Academy] SWEA 1211번 Ladder2 자바(Java)
    • [SW expert Academy] SWEA 7465번 창용 마을 무리의 개수 자바(Java)
    기몽수
    기몽수

    티스토리툴바