๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 2800๋ฒˆ - ๊ด„ํ˜ธ ์ œ๊ฑฐ

by ์•ˆ์ฃผํ˜• 2022. 6. 3.

๋ฌธ์ œ

 

2800๋ฒˆ: ๊ด„ํ˜ธ ์ œ๊ฑฐ

์ฒซ์งธ ์ค„์— ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์‹์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜์‹์€ ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ณ์ ธ์žˆ๋‹ค. ์ˆซ์ž, '+', '*', '-', '/', '(', ')'๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ˆ˜์‹์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 200์ด๊ณ , ๊ด„ํ˜ธ ์Œ์€ ์ ์–ด๋„ 1๊ฐœ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <stack>
#include <set>

using namespace std;

bool except[201];
vector<pair<int,int>>close;
stack<int> open;
set<string> ans;
string s;

void dfs(int index, int delete_cnt){
    
    if(delete_cnt >= 1){
        string temp = "";
        for(int i=0; i<s.length(); i++){
            if(!except[i]) temp+=s[i];
        }
        ans.insert(temp);
    }
    
    for(int i=index; i<close.size(); i++){
        except[close[i].first] = 1;
        except[close[i].second] = 1;
        dfs(i+1, delete_cnt+1);
        except[close[i].first] = 0;
        except[close[i].second] = 0;
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    
    cin>>s;
    for(int i=0; i<s.length(); i++){
        if(s[i]=='(') open.push(i);
        else if(s[i]==')'){
            close.push_back({open.top(), i});
            open.pop();
        }
    }
    dfs(0,0);
    
    for(auto it=ans.begin(); it!=ans.end(); it++){
        cout<<*it<<'\n';
    }
}

 

ํ’€์ด

๋ฐฑํŠธ๋ž™ํ‚น์˜ ๋น„์ค‘์ด ๋†’์•˜๋˜ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์—ด๋ฆฐ ๊ด„ํ˜ธ์ผ๋•Œ๋Š” stack์— ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ๋Š”๋‹ค.
  2. ๋‹ซํž ๊ด„ํ˜ธ์ผ๋•Œ๋Š” vector์— pairํ˜•ํƒœ๋กœ ๊ด„ํ˜ธ์˜ ์Œ์„ ์ €์žฅํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "(0/(0))"๋ฅผ ์ž…๋ ฅ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด vector<pair<int,int>> v = { {3, 5}, {0, 6} } ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ํ›„ ์ด์ œ ๋ฐฑํŠธ๋ž™ํ‚น์„ ์ด์šฉํ•˜์—ฌ ์กฐํ•ฉ์„ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•œ ์Œ๋“ค์€ except๋ผ๋Š” ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๊ธฐ๋กํ•˜์˜€์œผ๋ฉฐ, ํ•˜๋‚˜ ์ด์ƒ์˜ ์Œ์„ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์ˆ˜์‹์„ ์ฐพ๋„๋ก ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  ๋‹ค๋งŒ "( ( ( 0 ) ) ) ( 1 )" ์˜ ์ž…๋ ฅ์ด ์ฃผ์–ด์งˆ ๋•Œ  ๊ด„ํ˜ธ ์ค‘์—์„œ๋Š” ์ค‘๋ณต๋œ ํ˜•ํƒœ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ๋ถ€ํ„ฐ 1, 2, 3๋ฒˆ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ๋ดค์„ ๋•Œ,
  • 1๋ฒˆ ๊ด„ํ˜ธ๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ = ( ( 0 ) ) ( 1 )
  • 2๋ฒˆ ๊ด„ํ˜ธ๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ = ( ( 0 ) ) ( 1 )
  • 3๋ฒˆ ๊ด„ํ˜ธ๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ = ( ( 0 ) ) ( 1 )
  • ์ถœ์ฒ˜: https://yabmoons.tistory.com/352 

๋”ฐ๋ผ์„œ set์„ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด ์ฃผ์—ˆ๊ณ , ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์ œ์—์„œ "์„œ๋กœ ๋‹ค๋ฅธ ์‹์„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค." ์กฐ๊ฑด ๋˜ํ•œ set์„ ์ด์šฉํ•˜๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ž๋™์œผ๋กœ ์ •๋ ฌ์ด ๋˜๊ธฐ์— ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€