728x90
https://www.acmicpc.net/problem/14888
학교를 개강하고 정말 오랜만에 시간이 나서 알고리즘 문제를 풀어 보았다.
쉬운 문제는 그래도 술술 푸는걸 보니, 아직 감이 완전히 죽진 않은것 같다 ㅎㅎ
오늘 풀어본 문제는 연산자 끼워넣기. 삼성 sw 역량테스트 문제이다.
남은 연산자의 개수가 0이 될때까지, 각각의 +-*/ 연산자를 쓸 수 있는 갯수가 남아있는지 아닌지를 검사하면서
진행하면 풀 수 있는 문제이다.
solution(num,a,b,c,d)라는 함수를 만들어서 재귀로 호출해가면서 풀었는데, num은 지금까지 계산한 숫자이고, a,b,c,d는 각각 + - * / 의 연산자가 남은 갯수를 의미한다.
최댓값을 -10억, 최솟값을 +10억으로 초기화 한다음에,
a+b+c+d = 0이 되었을때 , 각각 최소 최대를 업데이트 해가면서 문제를 풀면 된다.
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
|
#include <iostream>
using namespace std;
const int INF = 1000000000;
int numlist[11];
int Min = INF;
int Max = -INF;
int n;
void solution(int num,int a,int b,int c,int d){
int rest = a+b+c+d;
if(rest==0){
Min = min(Min,num);
Max = max(Max,num);
}
if(a>0)
solution(num+numlist[n-rest],a-1,b,c,d);
if(b>0)
solution(num-numlist[n-rest],a,b-1,c,d);
if(c>0)
solution(num*numlist[n-rest],a,b,c-1,d);
if(d>0)
solution(num/numlist[n-rest],a,b,c,d-1);
}
int main(void){
cin>>n;
for(int i=0; i<n;i++)
cin>>numlist[i];
int a,b,c,d;
cin>>a>>b>>c>>d;
solution(numlist[0],a,b,c,d);
cout<<Max<<"\n"<<Min;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 2206 벽부수고 이동하기 - 이제는 3차원 visited 배열이 필요하다. c++ (2) | 2020.04.07 |
---|---|
백준 14500 테트로미노 - 모든게 다 dfs로 되는건 아니다 c++ (2) | 2020.04.04 |
백준 13460 구슬탈출2 - 구현 자체가 너무 까다로운 bfs문제 c++ (0) | 2020.03.12 |
백준 2098 외판원 순회 - 비트마스킹,dp,dfs c++ (0) | 2020.03.12 |
백준 14226 이모티콘 - 2차원 배열로 상태저장 bfs - c++ (0) | 2020.03.10 |