일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2798
- 15651
- 15652
- rustup
- 15649
- 백준
- 15683
- C++
- 9663
- 3190
- 분해합
- 14891
- 팰린드롬수
- 테트로미노
- 1259
- 14501
- 연산자 끼워넣기 성공
- 문제풀이
- 14890
- 15650
- C
- 13458
- 14503
- rust설치
- 13460
- 14888
- 10872
- 14500
- 러스트란 #cargo
- 백트래킹
Archives
Easy-So-Easy
[백준] 14888번 연산자 끼워넣기 성공 - C/C++ 본문
반응형
백준 1259 문제(Problem)
풀이(Solution)
이 문제는 재귀 함수의 사용 방법만 알면 간단하게 구현이 가능하다. 연산자를 넣어줄 배열 op를 선언하여 덧셈, 뺄셈, 곱셈, 나눗셈의 개수를 각각 넣어주었다. 그리고 사용 개수가 남아 있으면 연산을 실행하며 모든 연산을 하였을 때 최솟값, 최댓값을 계속해서 갱신해주면 되는 문제이다.
전체 코드(Code)
#include<iostream>
#include<algorithm>
#include<limits.h>
using namespace std;
int N, A[101], op[4], res_min=INT_MAX, res_max=INT_MIN;
int check(int pos, int i, int v) {
if(pos==0) return v+arr[i]; // + 덧셈
if(pos==1) return v-arr[i]; // - 뺄센
if(pos==2) return v*arr[i]; // * 곱셈
return v/arr[i]; // / 나눗셈
}
void func(int depth, int sum) {
if(depth == N) { // 모든 연산이 끝났을 때
res_min = min(res_min, sum);
res_max = max(res_max, sum);
return;
}
for(int i=0; i<4; i++) {
if(op[i]>0) {
op[i]--;
func(depth+1, check(i, depth, sum));
op[i]++;
}
}
}
int main() {
cin >> N;
for(int i=0; i<N; i++) cin >> A[i];
for(int i=0; i<4; i++) cin >> op[i];
func(1, A[0]);
cout << res_max << '\n' << res_min;
}
반응형
'BaekJoon' 카테고리의 다른 글
[백준 3190] 뱀 - C/C++ <쉽게 설명> (0) | 2023.06.27 |
---|---|
[백준] 12100번 2048 (Easy) - C/C++ (0) | 2023.06.25 |
[백준] 1259번 팰린드롬수 - C/C++ (0) | 2023.06.22 |
[백준] 10872번 팩토리얼 - C/C++ (0) | 2023.06.22 |
[백준] 2231번 분해합 - C/C++ (0) | 2023.06.22 |