Algorithm/๋ฐฑ์ค€(BOJ)

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

meeeeejin 2021. 1. 13. 01:05

 

๋ฌธ์ œ๋งํฌ: www.acmicpc.net/problem/2504

 

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

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

www.acmicpc.net

 

ํ’€์ด

 

๋ถ„๋ฐฐ ๋ฒ•์น™์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ( ( ) [ [ ] ] ) ์˜ ๊ฒฝ์šฐ์— 2x(2+3x3)์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š”๋ฐ, ์ด๋Š” ๊ฒฐ๊ตญ (2x2) + (2x3x3)๊ณผ ๊ฐ™๋‹ค. ์™ผ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด temp์— 2๋‚˜ 3์„ ๊ณฑํ•œ ๋’ค ์Šคํƒ์— push ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด temp๋ฅผ 2๋‚˜ 3์œผ๋กœ ๋‚˜๋ˆˆ ๋’ค ์Šคํƒ์„ pop ํ•œ๋‹ค. ์ด๋•Œ ( ( ) [ [ ] ] ) ํ‘œ์‹œ๋œ ๊ด„ํ˜ธ์ฒ˜๋Ÿผ ๊ด„ํ˜ธ ๊ฐ’์ด '( )' ๋˜๋Š” '[ ]'์ผ ๊ฒฝ์šฐ์—๋Š” temp ๊ฐ’์„ ๋‚˜๋ˆ ์ฃผ๊ธฐ ์ „์— answer์— ๋”ํ•œ๋‹ค. 

 

temp: answer์— ๋”ํ•˜๊ธฐ ์ „ ์ค‘๊ฐ„๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ (initial value: 1)

 

1. case ' ( '

   temp์— 2๋ฅผ ๊ณฑํ•˜๊ณ  ์Šคํƒ์— ' ( ' ๋ฅผ push

 

 

2. case ' ) '

   1) ์Šคํƒ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์Šคํƒ top์ด ' ( ' ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ

   ์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด์ด๋ฏ€๋กœ answer = 0; break;

 

   2) ์ด์ „ ๋ฌธ์ž์—ด์ด ' ( ' ์ผ ๊ฒฝ์šฐ

   ๊ด„ํ˜ธ ๊ฐ’์ด '( )' ์ด๋ฏ€๋กœ ๊ณ„์‚ฐ๋œ temp ๊ฐ’์„ answer์— ๋”ํ•ด์ฃผ๊ณ  temp๋ฅผ 2๋กœ ๋‚˜๋ˆˆ๋‹ค. ์Šคํƒ์„ pop ํ•œ๋‹ค. 

 

   3) ์ด์ „ ๋ฌธ์ž์—ด์ด ' ( ' ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ

   ์ œ์ผ ์•ˆ์ชฝ ๊ด„ํ˜ธ, ์ฆ‰ '( )' ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ด๋ฏธ answer์— ๊ฐ’์ด ๋”ํ•ด์ ธ ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค. ๋”ฐ๋ผ์„œ answer์— ๊ฐ’์„ ๋”ํ•˜์ง€ ์•Š๊ณ  temp๋ฅผ 2๋กœ ๋‚˜๋ˆ„๊ณ  ์Šคํƒ pop์„ ํ•œ๋‹ค. 

 

 

3, 4. case ' [ ', ' ] '

   1, 2์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋งŒ์•ฝ ๋ฌธ์ž์—ด์„ ๋‹ค ์ฝ์—ˆ๋Š”๋ฐ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด์ด๋ฏ€๋กœ answer = 0์„ ๋Œ€์ž…ํ•œ๋‹ค. 

 

 

 

 

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//2504 ๊ด„ํ˜ธ์˜ ๊ฐ’
#include <iostream>
#include <string>
#include <stack>
 
using namespace std;
 
string str;
stack<char> s;
 
int main(void) {
    cin >> str;
 
    int answer = 0, temp = 1;
    for(int i = 0; i < str.length(); i++) {
        if(str[i] == '(') {
            temp *= 2;
            s.push('(');
        }
        else if(str[i] == '[') {
            temp *= 3;
            s.push('[');
        }
        else if(str[i] == ')') {
            if(s.empty() || s.top() != '(') {   //์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด
                answer = 0;
                break;
            }
            if(str[i-1== '(') {
                answer += temp;
                temp /= 2;
                s.pop();
            }
            else {
                temp /= 2;
                s.pop();
            }
        }
        else if(str[i] == ']') {
            if(s.empty() || s.top() != '[') {   //์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด
                answer = 0;
                break;
            }
            if(str[i-1== '[') {
                answer += temp;
                temp /= 3;
                s.pop();
            }
            else {
                temp /= 3;
                s.pop();
            }
        }
    }
 
    if(!s.empty()) answer = 0;  //์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด
 
    cout << answer << "\n";
 
    return 0;
}
cs

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

 

728x90