백준 알고리즘 풀이 14888번 - 연산자 끼워넣기
2021. 7. 6. 17:27ㆍ프로그래밍/백준 알고리즘
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
- 순열문제 or dfs 문제
알고리즘
1. 숫자는 고정 시켜두고 순열 알고리즘을 통해 기호들을 배열함
소스코드
#include <iostream>
using namespace std;
char ca[5] = {' ','+','-','X','/'};
char arr[12];
int nums[12];
int n;
int maximum = -100000001;
int minimum = 100000001;
void swap(int a,int b){
char temp = arr[a];
arr[a]= arr[b];
arr[b] = temp;
}
void permu(int start,int end)
{
if(end==start){
int ans = nums[1];
for(int i=1;i<n;i++){
if(arr[i]=='+'){
ans += nums[i+1];
}
else if(arr[i]=='X'){
ans=ans*nums[i+1];
}
else if(arr[i]=='/'){
ans = ans/nums[i+1];
}
else if(arr[i]=='-'){
ans = ans-nums[i+1];
}
}
if(ans>maximum){
maximum = ans;
}
if(ans<minimum){
minimum = ans;
}
}
for(int i=start;i<n;i++){
swap(start,i);
permu(start+1,end);
swap(start,i);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>nums[i];
}
int count =0;
for(int i=1;i<=4;i++){
int a;
cin>>a;
for(int j=1+count;j<=a+count;j++){
arr[j] = ca[i];
}
count+= a;
}
permu(1,n-1);
cout<<maximum<<endl;
cout<<minimum;
}
틀린 내용이나 지적 언제나 환영입니다.
도움이 되었다면 하트 한번씩 눌러주세요:)
'프로그래밍 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 풀이 13460번 - 구슬 탈출 2 (0) | 2021.07.10 |
---|---|
백준 알고리즘 풀이 10973번 - 이전 순열 (0) | 2021.07.06 |
백준 알고리즘 풀이 10971번 - 외판원 순회 2 (0) | 2021.07.05 |
백준 알고리즘 풀이 14500번 - 테트로미노 (0) | 2021.07.05 |
백준 알고리즘 풀이 3197번 - 백조의 호수 (0) | 2021.06.21 |