반응형

https://www.acmicpc.net/problem/9012

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

public class MyClass {
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        int testcase = Integer.parseInt(sc.nextLine()); //case 수

	for(int i = 1; i <= testcase ; i++){
            String line = sc.nextLine();
            Stack<Character> stack = new Stack<>();
                for(int c = 0;c<line.length();c++){
                    //여는 괄호
                    if('(' == line.charAt(c)){
                       stack.push(line.charAt(c));
                    }else{
                    //닫는괄호
                        if(stack.empty()){
                            System.out.println("NO");
                            break;
                        }else{
                            stack.pop();
                        }
                       
                    }
                    
                    if(c==line.length()-1){
                        if (stack.empty()) {
			                System.out.println("YES");
	                   	}else{
	                   	    System.out.println("NO");
	                   	}
                    }
                    
                }
              
        }
    }
}

 

* 학습내용

1. String과 char의 비교

- char은 ''를 사용

- String은 ""를 사용

- str.equals(String.valueOf(ch))

- 그냥 '' == ch 해서 char끼리 비교하자...

 

2. Stack 타입 변수 사용

- 스택 선언하기 :  Stack<> stack = new Stack<>();

- push(), pop(), empty()

 

3. 메모리 사용 영역

JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역을 다음과 같이 세부 영역으로 구분해서 사용한다.

1) Method 영역

- 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류하여 저장한다.

2) Heap 영역

- 객체와 배열이 생성되는 영역

- 생성된 객체/배열을 참조하는 변수나 필드가 없다면 Garbage Collector를 실행시켜 힙 영역에서 자동으로 제거한다.

3) JVM Stack 영역

- 각 스레드가 시작될 때 할당된다.

- 메소드를 호출할 때마다 프레임(메소드의 변수 및 기타 부가정보로 이루어짐)을 push 하고 메소드가 종료되면 pop 하는 동작을 수행함.

- 프레임 내부에는 로컬 변수 스택이 있는데, 최초로 변수에 값이 저장될 때 생성됨.

- 기본 타입 변수는 스택영역에 직접 값을 가짐

- 참조 타입 변수는 값이 아니라 객체 주소를 가짐.

반응형

+ Recent posts