반응형
재귀를 사용해야만 풀수있는 문제이다.
14888.연산자 끼워넣기 와 비슷한 문제이지만 이문제는 연산자의 갯수가 최대 4N개가 주어질 수 있으므로 순열 또는 조합의 방법을 사용할 수 가 없다. 따라서 재귀를 사용해야하는데, 재귀의 조건은 연산자의 종류인 총 4가지가 될 수가 있다. 즉, 숫자와 숫자사이에서 가지고 있는 연산자의 갯수에 따라 4개중 어떤것을 호출하냐를 결정할 수 있다. 기저조건으로는 마지막 index까지 도달했을 경우로 두었다.
보통 재귀는 '했다', '안했다'를 재귀의 요소로 두지만, 이 경우는 '4가지중 어떤것을 했다' 로 두고 풀었다.
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
|
package online.base;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_bj_15658_연산자끼워넣기2 {
static int N;
static int[] numbers;
static int max,min;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
N=Integer.parseInt(br.readLine());
numbers=new int[N];
st=new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
numbers[i]=Integer.parseInt(st.nextToken());
}
int plus,minus,mul,div;
st=new StringTokenizer(br.readLine());
plus=Integer.parseInt(st.nextToken());
minus=Integer.parseInt(st.nextToken());
mul=Integer.parseInt(st.nextToken());
div=Integer.parseInt(st.nextToken());
max=Integer.MIN_VALUE;
min=Integer.MAX_VALUE;
func(numbers[0],1,plus,minus,mul,div);
System.out.println(max);
System.out.println(min);
}
static void func(int sum, int index, int plus, int minus,int mul,int div) {
if(index==N) {
return;
}
if(plus>0)
func(sum+numbers[index],index+1,plus-1,minus,mul,div);
if(minus>0)
func(sum-numbers[index],index+1,plus,minus-1,mul,div);
if(mul>0)
func(sum*numbers[index],index+1,plus,minus,mul-1,div);
if(div>0)
func(sum/numbers[index],index+1,plus,minus,mul,div-1);
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
반응형
'Algorithm' 카테고리의 다른 글
[BOJ] 1260. DFS와 BFS (0) | 2020.04.17 |
---|---|
[BOJ] 14226. 이모티콘 (0) | 2020.04.14 |
[BOJ] 14501. 퇴사 (0) | 2020.04.14 |
[BOJ] 1753. 최단경로 (0) | 2020.04.12 |
[BOJ] 1922. 네트워크 연결 (0) | 2020.04.12 |