๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[๋ฐฑ์ค€] 4949๋ฒˆ: ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ(์Šคํƒ, ๋ฌธ์ž์—ด)

by ์ฃผ๋ฐœ2 2020. 3. 27.
๋ฐ˜์‘ํ˜•

acmicpc.net/problem/4949

 

4949๋ฒˆ: ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

๋ฌธ์ œ ์„ธ๊ณ„๋Š” ๊ท ํ˜•์ด ์ž˜ ์žกํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค. ์–‘๊ณผ ์Œ, ๋น›๊ณผ ์–ด๋‘  ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ ๊ด„ํ˜ธ์™€ ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. ์ •๋ฏผ์ด์˜ ์ž„๋ฌด๋Š” ์–ด๋–ค ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ด„ํ˜ธ๋“ค์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž์ถฐ์ ธ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌธ์ž์—ด์— ํฌํ•จ๋˜๋Š” ๊ด„ํ˜ธ๋Š” ์†Œ๊ด„ํ˜ธ("()") ์™€ ๋Œ€๊ด„ํ˜ธ("[]")๋กœ 2์ข…๋ฅ˜์ด๊ณ , ๋ฌธ์ž์—ด์ด ๊ท ํ˜•์„ ์ด๋ฃจ๋Š” ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋ชจ๋“  ์™ผ์ชฝ ์†Œ๊ด„ํ˜ธ("(")๋Š” ์˜ค๋ฅธ์ชฝ ์†Œ๊ด„ํ˜ธ(")")์™€๋งŒ ์ง์„ ์ด๋ค„์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ์™ผ์ชฝ ๋Œ€๊ด„ํ˜ธ("[")๋Š” ์˜ค๋ฅธ์ชฝ ๋Œ€๊ด„

www.acmicpc.net

์ฝ”๋“œ

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		while(true) {
			
			String str = bf.readLine();
			if(str.equals("."))
				break;
			Stack<Character> s = new Stack<Character>();
			String result = "";
			boolean flag = true;
			for(int i=0; i<str.length(); i++) {
				
				/* ์—ฌ๋Š”๊ด„ํ˜ธ '(' ๋‚˜ '[' ๋Š” ์Šคํƒ์— ๋„ฃ์–ด์ค€๋‹ค. */
				if(str.charAt(i) == '(')
					s.push('(');
				
				else if(str.charAt(i) == '[')
					s.push('[');
				
				/* ๋‹ซ๋Š”๊ด„ํ˜ธ ')' ๋‚˜ ']' ๋Š” ์Šคํƒ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์—ฌ๋Š”๊ด„ํ˜ธ์™€ ์ง์ด ์•ˆ๋งž๋Š”๊ฒฝ์šฐ -> ํƒˆ์ถœํ•œ๋‹ค. */
				/* ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”๊ฒฝ์šฐ -> ์ž…๋ ฅ์ด ))] ์™€ ๊ฐ™์€๊ฒฝ์šฐ, */
				/* ์ง์ด ์•ˆ๋งž๋Š”๊ฒฝ์šฐ -> (([) ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, */
				else if(str.charAt(i) == ')') {
					if(s.isEmpty() || s.peek() != '(') {
						flag = false;
						break;
					}
					s.pop();
				}
				else if(str.charAt(i) == ']') {
						if(s.isEmpty() || s.peek() != '[') {
							flag = false;
							break;
						}
						s.pop();
						
				}
			}
			
			// ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ๊ท ํ˜•์ด ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
			if(!s.isEmpty())
				flag = false;
			result = (flag) ? "yes" : "no";
			System.out.println(result);
			
		}
		bf.close();
	}

}

ํ’€์ด

๊ด„ํ˜ธ ์—ด๊ณ  ๋‹ซ๋Š”๋ฌธ์ œ -> ์Šคํƒ์„ ์“ฐ๋ฉด ํŽธํ•  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

์—ฌ๋Š”๊ด„ํ˜ธ - '(' ๋‚˜ '[' ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์Šคํƒ์— ์Œ“๋Š”๋‹ค. (push)

 

๋‹ซ๋Š”๊ด„ํ˜ธ - ')' ๋‚˜ ']' ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ์ง์ผ๊ฒฝ์šฐ ์ œ๊ฑฐํ•œ๋‹ค. (pop)

 

 * ๋‹ซ๋Š”๊ด„ํ˜ธ๊ฐ€ ๋‚˜์™”์„๋•Œ, ์Šคํƒ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ์ง์ด ์•„๋‹Œ๊ฒฝ์šฐ -> ์ค‘๋‹จ(๊ท ํ˜•์žกํžŒ์„ธ์ƒ X)

    - ์Šคํƒ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋น„์–ด์žˆ๋Š”๊ฒฝ์šฐ -> ") ] ]" ์™€ ๊ฐ™์ด ์—ฌ๋Š” ๊ด„ํ˜ธ ์—†์ด ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š”๊ฒฝ์šฐ

    - ์ง์ด ์•„๋‹Œ ๊ฒฝ์šฐ -> "[ [ [ ( ] ) ์™€ ๊ฐ™์ด ๋‹ซ๋Š” ๊ด„ํ˜ธ ']' ์ธ๋ฐ ์ด์ „ ๋ฌธ์ž๋Š” '(' ์—ฌ์„œ ์ง์ด ๋งž์ง€ ์•Š์Œ.

 

์œ„ ๊ณผ์ •์ด ๋๋‚œํ›„ ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด -> ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€