Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - 백준
- 티스토리챌린지
- Frustum
- 언리얼엔진5
- IFileDialog
- 2294
- Unreal Engine5
- 1563
- GeeksForGeeks
- directx
- algorithm
- 팰린드롬 만들기
- C
- DirectX11
- RVO
- 줄 세우기
- baekjoon
- winapi
- Programmers
- NRVO
- const
- 프로그래머스
- C++
- UnrealEngine5
- RootMotion
- UE5
- UnrealEngine4
- 오블완
- TObjectPtr
- softeer
                            Archives
                            
                        
                          
                          - Today
- Total
Game Develop
[Algorithm] Baekjoon 14888번 : 연산자 끼워넣기 본문
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱
www.acmicpc.net
| 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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | int minAnswer = 0; int maxAnswer = 0; int n; int arr[11]; int opCount[11]; vector<int> nums; vector<int> op; bool isFirst = true; int calc(int a, int b, int op) {     switch (op)     {     case 0: return a + b;     case 1: return a - b;     case 2: return a * b;     case 3: return a / b;     } } void DFS(int index) {     if (nums.size() == n)     {         int result = calc(nums[0], nums[1], op[0]);         for (int i = 1; i < op.size(); ++i)         {             int nextNum = nums[i + 1];             result = calc(result, nextNum, op[i]);         }         if (isFirst)         {             minAnswer = maxAnswer = result;             isFirst = false;         }         else         {             maxAnswer = max(maxAnswer, result);             minAnswer = min(minAnswer, result);         }         return;     }     for (int i = 0; i < 4; ++i)     {         if (opCount[i] == 0) continue; // 명령어없으면 넘기기         opCount[i] -= 1;         op.push_back(i);         nums.push_back(arr[index + 1]);         DFS(index + 1);         nums.pop_back();         op.pop_back();         opCount[i] += 1;     } } int main(void) {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cin >> n;     for (int i = 0; i < n; ++i)     {         cin >> arr[i];     }     for (int i = 0; i < 4; ++i)     {         cin >> opCount[i];     }     nums.push_back(arr[0]);     DFS(0);     cout << maxAnswer << endl;     cout << minAnswer; } | cs | 
경우의 수 뽑는 완전탐색? 느낌의 문제이다.
숫자와 명령어가 주어지는데, 명령어는 순서가 없고 숫자는 순서가 있다.
그렇기 때문에 명령어 기준으로 DFS를 돌리면서 숫자와 명령어를 뽑아서 각각 n개, n-1개 모일때마다 모은걸로 계산을 해서 최소값,최대값을 업데이트 해주면 된다.
'Algorithm > Baekjoon' 카테고리의 다른 글
| [Algorithm] Baekjoon 9079번 : 동전 게임 (0) | 2023.09.22 | 
|---|---|
| [Algorithm] Baekjoon 1039번 : 교환 (0) | 2023.09.22 | 
| [Algorithm] Baekjoon 1525번 : 퍼즐 (0) | 2023.09.16 | 
| [Algorithm] Baekjoon 2234번 : 성곽 (0) | 2023.09.16 | 
| [Algorithm] Baekjoon 3055번 : 탈출 (0) | 2023.09.15 | 
