티스토리 뷰
생각
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]==0) continue; 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