ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€(BOJ) 2504๋ฒˆ] ๊ด„ํ˜ธ์˜ ๊ฐ’ (C++)
    PS(Problem Solving)/C++ 2022. 1. 21. 22:20
    ๋ฐ˜์‘ํ˜•

    ๋ฌธ์ œ ๋งํฌ

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

     

    ๋ฌธ์ œ ์ •๋ณด

    ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ๊ด„ํ˜ธ์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด(์ŠคํŠธ๋ง)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ ๊ทธ ๊ธธ์ด๋Š” 1 ์ด์ƒ, 30 ์ดํ•˜์ด๋‹ค.

    ์ถœ๋ ฅ

    ์ฒซ์งธ ์ค„์— ๊ทธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์ผ ์ž…๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด์ด๋ฉด ๋ฐ˜๋“œ์‹œ 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. 

     

    ํ’€์ด

     ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ต‰์žฅํžˆ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•ด๋ด๋„ ํ•ด๊ฒฐํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค. ์—ฌ๋Š” ๊ด„ํ˜ธ ์ค‘ ์†Œ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด 2๋ฅผ num์— ๊ณฑํ•˜๊ณ  ์Šคํƒ์— push ํ•˜๊ณ , ๋Œ€๊ด„ํ˜ธ๋Š” 3์„ num์— ๊ณฑํ•˜๊ณ  ์Šคํƒ์— push ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ซ๋Š” ๊ด„ํ˜ธ ์ค‘ ์†Œ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์™”์„ ๋•Œ ๊ด„ํ˜ธ ์Œ์ด ์˜ฌ๋ฐ”๋ฅด๋‹ค๋ฉด ๊ณฑํ•ด์ค€ num ๊ฐ’์„ sum์— ๋”ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์†Œ๊ด„ํ˜ธ ์Œ 1๊ฐœ๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์Šคํƒ์—์„œ popํ•ด์„œ ์ œ๊ฑฐํ•ด์ค€ ํ›„ ์†Œ๊ด„ํ˜ธ ์Œ์ด ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ num์„ 2๋กœ ๋‹ค์‹œ ๋‚˜๋ˆ ์ค€๋‹ค. ๋Œ€๊ด„ํ˜ธ๋„ ๋˜‘๊ฐ™์ด ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

     

    ์†Œ์Šค ์ฝ”๋“œ

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(void) {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	
    	string str;
    	cin >> str;
    	
    	int sum = 0; // ๋ˆ„์ ํ•ด์„œ ๋”ํ•ด์ง€๋Š” ๊ฐ’
    	int num = 1; // ๊ณฑํ•ด์งˆ ๊ฐ’
    	
    	stack<char> S;
    	
    	for (int i = 0; i < str.length(); i++) {
    		if (str[i] == '(') {
    			num *= 2; // ์†Œ๊ด„ํ˜ธ ๊ณฑํ•˜๊ธฐ 2
    			S.push(str[i]);
    		} else if (str[i] == '[') {
    			num *= 3; // ๋Œ€๊ด„ํ˜ธ ๊ณฑํ•˜๊ธฐ 3
    			S.push(str[i]);
    		} else if (str[i] == ')') {
    			if (S.empty() || S.top() != '(') { // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์Œ
    				sum = 0;
    				break;
    			}
    			if (str[i - 1] == '(') {
    				sum += num; // ์•ž์—๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ์˜€๋‹ค๋ฉด sum์— ๊ฐ’์„ ๋”ํ•œ๋‹ค.
    			}
    			S.pop();
    			num /= 2; // ์†Œ๊ด„ํ˜ธ ์Œ์ด ์‚ฌ๋ผ์ ธ์„œ 2๋กœ ๋‚˜๋ˆˆ๋‹ค.
    		} else { // str[i] == ']'
    			if (S.empty() || S.top() != '[') { // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์Œ
    				sum = 0;
    				break;
    			}
    			if (str[i - 1] == '[') {
    				sum += num; // ์•ž์—๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ์˜€๋‹ค๋ฉด sum์— ๊ฐ’์„ ๋”ํ•œ๋‹ค.
    			}
    			S.pop();
    			num /= 3; // ๋Œ€๊ด„ํ˜ธ ์Œ์ด ์‚ฌ๋ผ์ ธ์„œ 3์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
    		}
    	}
    	
    	if (S.empty()) {
    		cout << sum;
    	} else { // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์Œ
    		cout << '0';
    	}
    	
    	return 0;
    }

     

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.