on
[알고리즘] 올바른 괄호
[알고리즘] 올바른 괄호
설명
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
입력
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
출력
첫 번째 줄에 YES, NO를 출력한다.
예시 입력 1 (()(()))(() 예시 출력 1 NO
풀이
스택이라는걸 너무 오랜만에 들어서 처음에 큐랑 헷갈릴정도였다 이번에 문제풀면서 상기했다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class correctParenthesis { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); char[] arr = st.nextToken().toCharArray(); Stack stack = new Stack(); String answer = "YES"; for(int i = 0; i < arr.length; i++){ if (arr[i] == '(') stack.push(arr[i]); else if(!stack.isEmpty() && stack.peek() =='(') stack.pop(); else{ answer = "NO"; break; } } if(!stack.isEmpty()) answer = "NO"; System.out.println(answer); } }
강사님 코드를 보니깐 peek 자체가 필요가 없었다 어차피 else if(!stack.isEmpty() && stack.peek() =='(') stack.pop(); 이 부분에 왔을때는 그냥 스텍이 비어있는지 확인해주고 그 뒤에 비어있다면 NO출력 안비어있다면 무조건 pop을 해줘야하는거였다
강사님코드
import java.util.*; class Main { public String solution(String str){ String answer="YES"; Stack stack=new Stack<>(); 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)); } }
from http://til-blog.tistory.com/35 by ccl(A) rewrite - 2021-12-29 04:02:17