πŸ‘©β€πŸ’» BOJ_9012_κ΄„ν˜Έ

YOU KNOW I MEANΒ·2022λ…„ 4μ›” 20일
0
post-thumbnail

πŸ’¬ 1λ…„ 전에 ν’€μ—ˆλ˜ μ½”λ“œμ— λΉ„ν•΄ μ†λ„λŠ” λŠλ Έμ§€λ§Œ μ‰½κ²Œ μ ‘κ·Όν•˜μ—¬ ν’€μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“„ 문제

κ΄„ν˜Έ λ¬Έμžμ—΄(Parenthesis String, PS)은 두 개의 κ΄„ν˜Έ 기호인 β€˜(’ 와 β€˜)’ 만으둜 κ΅¬μ„±λ˜μ–΄ μžˆλŠ” λ¬Έμžμ—΄μ΄λ‹€. κ·Έ μ€‘μ—μ„œ κ΄„ν˜Έμ˜ λͺ¨μ–‘이 λ°”λ₯΄κ²Œ κ΅¬μ„±λœ λ¬Έμžμ—΄μ„ μ˜¬λ°”λ₯Έ κ΄„ν˜Έ λ¬Έμžμ—΄(Valid PS, VPS)이라고 λΆ€λ₯Έλ‹€. ν•œ 쌍의 κ΄„ν˜Έ 기호둜 된 β€œ( )” λ¬Έμžμ—΄μ€ κΈ°λ³Έ VPS 이라고 λΆ€λ₯Έλ‹€. 만일 x κ°€ VPS 라면 이것을 ν•˜λ‚˜μ˜ κ΄„ν˜Έμ— 넣은 μƒˆλ‘œμš΄ λ¬Έμžμ—΄ β€œ(x)”도 VPS κ°€ λœλ‹€. 그리고 두 VPS x 와 yλ₯Ό μ ‘ν•©(concatenation)μ‹œν‚¨ μƒˆλ‘œμš΄ λ¬Έμžμ—΄ xy도 VPS κ°€ λœλ‹€. 예λ₯Ό λ“€μ–΄ β€œ(())()”와 β€œ((()))” λŠ” VPS μ΄μ§€λ§Œ β€œ(()(”, β€œ(())()))” , 그리고 β€œ(()” λŠ” λͺ¨λ‘ VPS κ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ΄λ‹€.

μ—¬λŸ¬λΆ„μ€ μž…λ ₯으둜 주어진 κ΄„ν˜Έ λ¬Έμžμ—΄μ΄ VPS 인지 μ•„λ‹Œμ§€λ₯Ό νŒλ‹¨ν•΄μ„œ κ·Έ κ²°κ³Όλ₯Ό YES 와 NO 둜 λ‚˜νƒ€λ‚΄μ–΄μ•Ό ν•œλ‹€.

πŸ’‘ 풀이 방법

  • '(' λ¬ΈμžλŠ” Stack에 μ €μž₯ν•˜κ³  ')' λ¬Έμžκ°€ λ“±μž₯ν•˜λ©΄ Stack.pop(); ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • ⭐️ 더이상 μŠ€νƒμ—μ„œ κΊΌλ‚Ό 수 μ—†κ±°λ‚˜ μŠ€νƒ μ‚¬μ΄μ¦ˆκ°€ 0 μ΄μƒμž„μ—λ„ ')' λ¬Έμžκ°€ λ“±μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ VPSκ°€ μ•„λ‹ˆλΌκ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ”₯ μ½”λ“œ

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

public class κ΄„ν˜Έ {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		for(int i = 0; i < N; i++) {
			String s = br.readLine();
			Stack<Character> sc = new Stack<Character>();
			
			for(int c = 0; c < s.length(); c++) {
				
				if(s.charAt(c) == '(') {
					sc.push(s.charAt(c));
					//System.out.println("in");
				}
				else {
					if(sc.size() == 0) {
						System.out.println("NO");
						break;
					}
					else {
						sc.pop();
					}
				}
				
				if(c == s.length() - 1)
					if(sc.size() > 0) {
						System.out.println("NO");
						break;
					}
					else {
						System.out.println("YES");
					}
				
			}
			
		}
		
	}

}

⭐️ 였늘의 ν•™μŠ΅

Stack/Queue 자료 ꡬ쑰 μ‚¬μš©λ²•

  • Stack<ν˜•νƒœ> s = new Stack<ν˜•νƒœ>();
  • Queue<ν˜•νƒœ> q = new LinkedList<ν˜•νƒœ>();

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보