티스토리 뷰

생각

Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q15658.java 이전 연산자 끼워넣기([백준] 14888번 연산자 끼워넣기) 문제와 동일하다. 하나 다른점이라면 연산자의 개수를 N-1개 보다 많이 줄 수도 있다.


처음 생각

기존 문제와 똑같이 풀이를 해주면 된다.  한가지 다른점인 연산자의 개수가 N-1개 보다 많을 수 있기 때문에 기존의 풀이였던 재귀의 매개변수에 기호들을 넣어던 것 과달리 크기가 4인 배열로 관리해서 코드를 조금 줄여보았다.

▶ 1개의 배열로 관리를 하기 때문에 반복문으로 모든 조건을 넣어주는것이 가능해진다.


다음 생각

이전 문제와 마찬가지로 주어진 숫자의 맨 앞값은 이전에 계산되는게 없으므로 처음 sum의 초기값으로 idx=0의 숫자 값을 넣어주었고, idx의 시작도 1부터 시작하도록 하였다.


다다음 생각

idx가 주어진 개수를 넘어서면 sum의 최대값과 최소값을 찾아보고 return해 주었다.


방안

1) 재귀가 매력적인 풀이 같다. for문을 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
package baekjoon.q10000;
 
import java.util.Scanner;
 
public class Q15658 {
    static int n;
    static int[] arr,giho;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        arr = new int[n];
        giho = new int[4];
        for(int i=0;i<n;i++)
            arr[i] = sc.nextInt();
        for(int i=0;i<4;i++)
            giho[i] = sc.nextInt();
        
        // 최대 최소 값 초기화
        resultMax = Integer.MIN_VALUE;
        resultMin = Integer.MAX_VALUE;
        solve(1,arr[0]);
        System.out.println(resultMax);
        System.out.println(resultMin);
    }
    
    static int resultMax,resultMin;
    private static void solve(int idx,int sum) {
        // 모든 숫자 계산 완료
        if(idx>=n) {
            resultMax = Math.max(resultMax, sum);
            resultMin = Math.min(resultMin, sum);
            return;
        }
        
        for(int i=0;i<4;i++) {
            if(giho[i]==0continue;
            giho[i]--;
            switch (i) {
            case 0// +
                solve(idx+1,sum+arr[idx]);
                break
            case 1// -
                solve(idx+1,sum-arr[idx]);
                break;
            case 2// x
                solve(idx+1,sum*arr[idx]);
                break;
            case 3// /
                solve(idx+1,sum/arr[idx]);
                break;
            }
            giho[i]++;
        }
    }
}
 


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 5014번 스타트링크  (0) 2018.10.24
[백준] 3019번 테트리스  (0) 2018.10.24
[백준] 14391번 종이 조각  (1) 2018.10.24
[백준] 10819번 차이를 최대로  (0) 2018.10.23
[백준] 4796번 캠핑  (0) 2018.10.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday