반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


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

1) 난이도 : D4

 

2) 문제번호 : 1218번

 

3) 문제 출처

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

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

2. 문제

4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.

이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.

예를 들어 아래와 같은 문자열은 유효하다고 판단할 수 있다.



아래와 같은 문자열은 유효하지 않은 문자열이다. 붉은색으로 표시된 괄호의 짝을 찾을 수 없기 때문이다.



아래 문자열은 열고 닫는 괄호의 개수는 유효하나 짝이 맞지 않는 괄호가 사용 되었기 때문에 유효하지 않다.

3. 제약사항

 

4. 입력

각 테스트 케이스의 첫 번째 줄에는 테스트케이스의 길이가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다.

총 10개의 테스트케이스가 주어진다.

 

5. 출력

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 유효성 여부를 1 또는 0으로 표시한다 (1 - 유효함, 0 - 유효하지 않음).

6. 풀이

- 이 문제가 왜 D4?

- 물론, 스택으로 푸는것도 좋지만, 스택으로 풀지 않아도 되는 문제

- 배열에 입력값을 받고, count 배열 1개를 더 만들어서 각 열리는 기호에 맞는 기호가 오면 ++, 닫히는 기호가 있으면 -- 해서 count 배열에서 0이 아닌 다른 값이 있으면 0 출력 0만 있으면 1출력

7. 소스 코드

import java.util.Scanner;
import java.util.Stack;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		for(int tc=1;tc<=10;tc++) {
			Stack<Character> stack = new Stack<>();
			int[] sign = new int[4];
			boolean sig = true;
			
			
			for(int i=0;i<sign.length;i++) sign[i] = 0;
			
			//테스트케이스의 길이
			int T = sc.nextInt();
			
			//테스트케이스
			String a = sc.next();
			
			//배열에 테스트케이스 저장
			char[] arr = new char[a.length()];
			
			//입력받기
			for(int i=0;i<a.length();i++) arr[i] = a.charAt(i);
			
			for(int i=0;i<arr.length;i++) {
				if(arr[i]=='(') sign[0]++;
				else if(arr[i]==')') sign[0]--;
				
				if(arr[i]=='[') sign[1]++;
				else if(arr[i]==']') sign[1]--;
				
				if(arr[i]=='{') sign[2]++;
				else if(arr[i]=='}') sign[2]--;
				
				if(arr[i]=='<') sign[3]++;
				else if(arr[i]=='>') sign[3]--;
			}
			
			for(int i=0;i<sign.length;i++) {
				if(sign[i]!=0) {
					sig = false;
					System.out.printf("#%d %d\n",tc,0);
					break;
				}
				else if(sign[i]==0) {
					sig = true;
				}
			}
			if(sig == true) {
				System.out.printf("#%d %d\n",tc,1);
			}
			
		}
		
			
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기