๐Ÿ• Baaaaaarking/0x08๊ฐ• - ์Šคํƒ์˜ ํ™œ์šฉ (์ˆ˜์‹์˜ ๊ด„ํ˜ธ์Œ)

[BOJ S2][C++] 2504๋ฒˆ: ๊ด„ํ˜ธ์˜ ๊ฐ’

์„ ๋‹ฌ 2022. 3. 6. 03:24
๋ฐ˜์‘ํ˜•

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

 

2504๋ฒˆ: ๊ด„ํ˜ธ์˜ ๊ฐ’

4๊ฐœ์˜ ๊ธฐํ˜ธ ‘(’, ‘)’, ‘[’, ‘]’๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ด„ํ˜ธ์—ด ์ค‘์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค. ํ•œ ์Œ์˜ ๊ด„ํ˜ธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ‘()’์™€ ‘[]’๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋‹ค.  ๋งŒ์ผ

www.acmicpc.net

 

๋ฌธ์ œ

4๊ฐœ์˜ ๊ธฐํ˜ธ ‘(’, ‘)’, ‘[’, ‘]’๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ด„ํ˜ธ์—ด ์ค‘์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค.

  1. ํ•œ ์Œ์˜ ๊ด„ํ˜ธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ‘()’์™€ ‘[]’๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋‹ค. 
  2. ๋งŒ์ผ X๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ฉด ‘(X)’์ด๋‚˜ ‘[X]’๋„ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ๋œ๋‹ค. 
  3. X์™€ Y ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ผ๋ฉด ์ด๋“ค์„ ๊ฒฐํ•ฉํ•œ XY๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ‘(()[[]])’๋‚˜ ‘(())[][]’ ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด์ง€๋งŒ ‘([)]’ ๋‚˜ ‘(()()[]’ ์€ ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด ์•„๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด X์— ๋Œ€ํ•˜์—ฌ ๊ทธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’(๊ด„ํ˜ธ๊ฐ’)์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ  ๊ฐ’(X)๋กœ ํ‘œ์‹œํ•œ๋‹ค. 

  1. ‘()’ ์ธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 2์ด๋‹ค.
  2. ‘[]’ ์ธ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 3์ด๋‹ค.
  3. ‘(X)’ ์˜ ๊ด„ํ˜ธ๊ฐ’์€ 2×๊ฐ’(X) ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  4. ‘[X]’ ์˜ ๊ด„ํ˜ธ๊ฐ’์€ 3×๊ฐ’(X) ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  5. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด X์™€ Y๊ฐ€ ๊ฒฐํ•ฉ๋œ XY์˜ ๊ด„ํ˜ธ๊ฐ’์€ ๊ฐ’(XY)= ๊ฐ’(X)+๊ฐ’(Y) ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ‘(()[[]])([])’ ์˜ ๊ด„ํ˜ธ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž. ‘()[[]]’ ์˜ ๊ด„ํ˜ธ๊ฐ’์ด 2 + 3×3=11 ์ด๋ฏ€๋กœ ‘(()[[]])’์˜ ๊ด„ํ˜ธ๊ฐ’์€ 2×11=22 ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ‘([])’์˜ ๊ฐ’์€ 2×3=6 ์ด๋ฏ€๋กœ ์ „์ฒด ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 22 + 6 = 28 ์ด๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ’€์–ด์•ผ ํ•  ๋ฌธ์ œ๋Š” ์ฃผ์–ด์ง„ ๊ด„ํ˜ธ์—ด์„ ์ฝ๊ณ  ๊ทธ ๊ด„ํ˜ธ๊ฐ’์„ ์•ž์—์„œ ์ •์˜ํ•œ๋Œ€๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

 

ํ’€์ด

(1)

์šฐ์„  ๊ด„ํ˜ธ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์–ด์žˆ๋Š”๊ฐ€๋ฅผ ํŒ๋‹จํ•ด์„œ ์•„๋‹๊ฒฝ์šฐ 0์ด ๋˜๋„๋ก ๋งŒ๋“ ๋‹ค

[๐Ÿ• Baaaaaarking/0x08๊ฐ• - ์Šคํƒ์˜ ํ™œ์šฉ (์ˆ˜์‹์˜ ๊ด„ํ˜ธ์Œ)] - [BOJ S4][C++] ๋ฐฑ์ค€ 9012๋ฒˆ: ๊ด„ํ˜ธ

ํ•„์š”ํ•˜๋‹ค๋ฉด ์ฐธ๊ณ 

 

(2)

๋ณธ ๋ฌธ์ œ๋Š” "๋ถ„๋ฐฐ๋ฒ•์น™"์„ ๋™์‹œ์— ํ•˜๋ฉด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค

๊ด„ํ˜ธ๊ฐ€ ์—ด๋ฆด๋•Œ๋งˆ๋‹ค ๊ทธ ์•ˆ์˜ ์š”์†Œ๋“ค์— ๊ณฑํ•ด์งˆ ๊ฒƒ์„ ๋ฏธ๋ฆฌ mul ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๊ณฑํ•ด๋‘๋Š”๊ฒƒ์ด๋‹ค

 

(3)

๊ด„ํ˜ธ๊ฐ€ ๋‹ซํžˆ๋ฉด 

1. ์›๋ž˜ ๋ฐ”๋กœ ์•ž์— ์ง์ด ์žˆ๋˜ ๊ฒฝ์šฐ -> ์ƒ์ˆ˜ (2๋‚˜ 3) ์ธ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ mul์— ์žˆ๋˜ ๊ณผ ๊ณฑํ•ด์ ธ์„œ ans ์— ๋”ํ•ด์ง

2. 1์ด ์•„๋‹Œ๊ฒฝ์šฐ -> ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ด„ํ˜ธ์ด๋ฏ€๋กœ ๊ทธ๋ƒฅ ์–Œ์ „ํžˆ ๋‹ซํžŒ๋‹ค

( mul์— ๋ณธ์ธ ์ง์ด ์—ด๋ฆฌ๋ฉด์„œ ๊ณฑํ•ด๋†“์€ ๋ถ€๋ถ„์„ ๋‚˜๋ˆ„๊ธฐ๋กœ ์ƒ์‡„์‹œํ‚ค๋ฉด์„œ ์–Œ์ „ํžˆ ๋– ๋‚˜๊ธฐ (pop) )

 

// Authored by : seondal
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <stack>

using namespace std;

int ans;
stack<char> s;

int main() {
    
    int ans = 0;
    int mul = 1;
    
    string input;
    cin >> input;
    
    for(int i=0; i<input.size(); i++){
        if(input[i] == '(') {
        // (2)
            mul *= 2;
            s.push('(');
        }
        else if(input[i] == ')') {
            if(s.empty() || s.top() != '(') {
            // (1)
                cout << 0;
                return 0;
            }
            
            // (3)
            if(input[i-1] == '(') {
                mul /= 2;
                s.pop();
                ans += mul*2;
            } else {
                mul /= 2;
                s.pop();
            }
        }
        else if(input[i] == '[') {
        // (2)
            mul *= 3;
            s.push('[');
        }
        else if(input[i] == ']') {
            if(s.empty() || s.top() != '[') {
            // (1)
                cout << 0;
                return 0;
            }
            
            // (3)
            if(input[i-1] == '[') {
                mul /= 3;
                s.pop();
                ans += mul*3;
            } else {
                mul /= 3;
                s.pop();
            }
        }
    }
    
    // (1)
    if(s.empty()) cout << ans;
    else cout << 0;
    
    return 0;
}
/*
 */
๋ฐ˜์‘ํ˜•