반응형
https://www.acmicpc.net/problem/2800
2800번: 괄호 제거
첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개
www.acmicpc.net
[ 문제풀이 ]
1. 수식을 입력받아 각 괄호에 번호를 붙입니다.
2. 조합을 이용하여 각 괄호들을 제거해주고, set 자료구조에 저장하여 중복을 제거해줍니다.
3. 저장된 답을 출력합니다.
[ 소스코드 ]
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 62 63 | #include<iostream> #include<string> #include<stack> #include<set> using namespace std; string str; int arr[200]; set<string> ans; int visited[11]; int cnt; void dfs(int limit, int level, int num) { if (level == limit) { string temp = ""; for (int i = 0; i < str.size(); i++) { if (visited[arr[i]] != 1) { temp += str[i]; } } ans.insert(temp); return; } for (int i = num; i <= cnt; i++) { visited[i] = 1; dfs(limit, level + 1, i + 1); visited[i] = 0; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> str; stack<int> s; for (int i = 0; i < str.size(); i++) { if (str[i] == '(') { cnt++; arr[i] = cnt; s.push(cnt); } else if (str[i] == ')') { arr[i] = s.top(); s.pop(); } } for (int i = 1; i <= cnt; i++) { dfs(i, 0, 1); } for (auto& next : ans) { cout << next << '\n'; } } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 7432번 - 디스크 트리 (C++) (0) | 2023.07.24 |
---|---|
[ 백준 ] 16929번 - Two Dots (C++) (0) | 2023.07.23 |
[ 백준 ] 1990번 - 소수인팰린드롬(C++) (0) | 2023.07.21 |
[ 백준 ] 23326번 - 홍익 투어리스트 (C++) (0) | 2023.07.20 |
[ 백준 ] 21939번 - 문제 추천 시스템 Version 1 (C++) (0) | 2023.07.19 |