๐Ÿ•๏ธ ICPC Sinchon/Linear Data Structure

[BOJ S1][C++] ๋ฐฑ์ค€ 4889๋ฒˆ : ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด

์„ ๋‹ฌ 2022. 9. 14. 05:51
๋ฐ˜์‘ํ˜•

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

 

4889๋ฒˆ: ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ค„์—๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 2000์„ ๋„˜๋Š” ๊ฒฝ์šฐ

www.acmicpc.net

 

๋ฌธ์ œ

์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์—ฌ๊ธฐ์„œ ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด์˜ ์ •์˜๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋นˆ ๋ฌธ์ž์—ด์€ ์•ˆ์ •์ ์ด๋‹ค.
  2. S๊ฐ€ ์•ˆ์ •์ ์ด๋ผ๋ฉด, {S}๋„ ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด์ด๋‹ค.
  3. S์™€ T๊ฐ€ ์•ˆ์ •์ ์ด๋ผ๋ฉด, ST(๋‘ ๋ฌธ์ž์—ด์˜ ์—ฐ๊ฒฐ)๋„ ์•ˆ์ •์ ์ด๋‹ค.

{}, {}{}, {{}{}}๋Š” ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด์ด์ง€๋งŒ, }{, {{}{, {}{๋Š” ์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด์— ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์€ ์—ฌ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋‹ซ๋Š” ๊ด„ํ˜ธ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ๋‹ซ๋Š” ๊ด„ํ˜ธ๋ฅผ ์—ฌ๋Š” ๊ด„ํ˜ธ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ 2๊ฐ€์ง€์ด๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ค„์—๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 2000์„ ๋„˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†๊ณ , ํ•ญ์ƒ ๊ธธ์ด๋Š” ์ง์ˆ˜์ด๋‹ค.

์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ์ค„์€ '-'๊ฐ€ ํ•œ ๊ฐœ ์ด์ƒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ์™€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์•ˆ์ •์ ์œผ๋กœ ๋ฐ”๊พธ๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์Šคํƒ์„ ์ด์šฉํ•˜์—ฌ ๊ด„ํ˜ธ๋“ค์˜ ์ง์„ ๋งž์ถ”๋ฉด (์•„๋ž˜ ๋ฌธ์ œ ํ’€์ด ์ฐธ๊ณ , ์ด๋•Œ ์ง์ด ์•ˆ๋งž์„ ๊ฒฝ์šฐ์—๋„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ์„ ์ด์–ด๋‚˜๊ฐ„๋‹ค)

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

 

[BOJ S4][C++] ๋ฐฑ์ค€ 9012๋ฒˆ: ๊ด„ํ˜ธ

https://www.acmicpc.net/problem/9012 9012๋ฒˆ: ๊ด„ํ˜ธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Parenthesis String, PS)์€ ๋‘ ๊ฐœ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ์ธ ‘(’ ์™€ ‘)’ ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ๊ทธ ์ค‘์—์„œ ๊ด„ํ˜ธ์˜ ๋ชจ์–‘์ด ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž..

whkakrkr.tistory.com

์—ฐ์‚ฐ ํ›„ ์Šคํƒ์—๋Š” ์ง์ด ๋งž์ง€ ์•Š๋Š” ๊ด„ํ˜ธ๋“ค๋งŒ ๋‚จ๋Š”๋‹ค.

์ด ์Šคํƒ์—์„œ ๋‘๊ฐœ์”ฉ ๊บผ๋‚ด์„œ (๊ฐœ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด ์ง์ˆ˜์ด๋ฏ€๋กœ)

 

1. ๋‘ ๊ด„ํ˜ธ์˜ ๋ฐฉํ–ฅ์ด ๊ฐ™๋‹ค๋ฉด ans++ ( '{{',  '}}' )
2.๋‘ ๊ด„ํ˜ธ์˜ ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅด๋‹ค๋ฉด ans+2 ( '}{' )

 

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

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

using namespace std;
    
int main() {
    string input;
    
    int case_num = 1;
    
    while(getline(cin, input)) {
        if(input[0]=='-') {
            break;
        }
        
        stack<char> s;
        for(int i=0; i<input.size(); i++) {
            if(input[i] == '}' && !s.empty() && s.top() == '{')
                s.pop();
            else
                s.push(input[i]);
        }

        int ans = 0;
        while(!s.empty()) {
            char first = s.top();
            s.pop();
            char second = s.top();
            s.pop();
            
            if(first == second) ans++;
            else ans += 2;
        }
        
        cout <<  case_num << ". " << ans << "\n";
        case_num++;
    }
    
    return 0;
}

/*
 */

 

solution() ์ฝ”๋“œ ๋ฒ„์ „ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค)

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

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

using namespace std;

int solution(stack<char> &s) {
    int ans = 0;
    while(!s.empty()) {
        char first = s.top();
        s.pop();
        char second = s.top();
        s.pop();
        
        if(first == second) ans++;
        else ans += 2;
    }
    return ans;
}

stack<char> bracket_stack(string &input) {
    stack<char> s;
    
    for(int i=0; i<input.size(); i++) {
        if(input[i] == '}' && !s.empty() && s.top() == '{')
            s.pop();
        else
            s.push(input[i]);
    }
    
    return s;
}

int main() {
    string input;
    
    int case_num = 1;
    
    while(getline(cin, input)) {
        if(input[0]=='-') {
            break;
        }

        stack<char> s = bracket_stack(input);
        int ans = solution(s);
        
        cout <<  case_num << ". " << ans << "\n";
        case_num++;
    }
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•