코딩 테스트(JAVA)/인프런 문제풀이

올바른 괄호

Lea Hwang 2022. 3. 16. 22:00

설명

괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.

(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

 

입력

첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.

 

출력

첫 번째 줄에 YES, NO를 출력한다.

 

예시 입력 1

(()(()))(()

예시 출력 1

NO

 

수도 코드

( 만나면 stack에 넣습니다.

) 만나고 ( (stack 맨 상단)을 만나면 pop합니다. — 이게 올바른 괄호 인 것

) 만났는데, 스택이 비어있으면 잘 못 된것이므로 return “No” 합니다.

스택 비어있는지 확인 : isEmpty()

다 끝났을 때 stack이 비어있지 않다면, 이건 (가 많은 거니까 잘 못 된 것이므로 return “No”합니다.

 

정답 코드 구현

import java.util.*;

class Main {	
	public String solution(String str){
		String answer="YES";
		// 괄호를 입력할 거니까 Character
		Stack<Character> stack = new Stack<>();
		// 전달받은 str은 String이니까 CharArray로 바꿈
		for(char x : str.toCharArray()){
			if(x=='(') stack.push(x);
			else{
				if(stack.isEmpty()) return "NO";
				stack.pop();
			}
		}
		if(!stack.isEmpty()) return "NO";
		return answer;
	}

	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		String str=kb.next();
		System.out.println(T.solution(str));
	}
}

 

💡 if(x == '(') stack.push(x);

=== 아닌 ==

”(” 아닌 ‘(’

 

 

헷갈리는 개념 Study

💡 Scanner 클래스에서 next(), nextLine() 메서드는 String 타입으로 리턴해준다.

public class Example {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
        
		System.out.println("nextLine: ");
		String str1 = scanner.nextLine();
		System.out.println(str1);
        
		System.out.println("next: ");
		String str2 = scanner.next();
		System.out.println(str2);
	}
}

// 결과
nextLine :
안녕하세요 반갑습니다 <- 입력값
안녕하세요 반갑습니다 <- 출력된 형태
next : 
안녕하세요 반갑습니다 <- 입력값
안녕하세요 <- 출력된 형태

nextLine()메소드는 Enter를 치기 전까지 쓴 문자열을 모두 리턴,

next() 메소드는 Space 즉 공백 전까지 입력받은 문자열을 리턴합니다.

공백이 있는 한줄을 리턴받고 싶으면 nextLine() 메소드를 사용하고, 한 단어만 리턴받고 싶으면 next() 메소드를 사용하면 됩니다.

'코딩 테스트(JAVA) > 인프런 문제풀이' 카테고리의 다른 글

공주 구하기  (0) 2022.03.16
쇠막대기  (0) 2022.03.16
후위식 연산(postfix)  (0) 2022.03.16
크레인 인형뽑기(카카오)  (0) 2022.03.16
괄호 문자 제거  (0) 2022.03.16