<Algorithm> 149. 숫자만들기(SWExpert)
by BFine반응형
1. 숫자만들기(SWExpert)
완전탐색 백트래킹 문제
백준에서 풀었던 연산문제와 동일했다. SWExpert는 테스트케이스 형태로 주어지기 때문에 초기화에 신경을 많이 써야한다.
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 62 63 | import java.util.Scanner; public class Solution { static int n; static int[] oper = new int[4]; static int[] nums; public static void main(String[] args) { Scanner sc = new Scanner(System.in); /****************************** * 완전탐색을 이용하여 모든경우의 수를 구한다. * 이때 연산자가 없을경우는 탐색하지 않는다. *******************************/ int test =sc.nextInt(); for(int t = 1; t <= test; t++) { n = sc.nextInt(); nums = new int[n]; for(int i = 0; i < 4; i++) { oper[i] = sc.nextInt(); } for(int i = 0; i < n; i++) { nums[i] = sc.nextInt(); } max = Integer.MIN_VALUE; min = Integer.MAX_VALUE; solve(1, nums[0]); System.out.println("#"+t+" "+(max-min)); } } static int min; static int max; public static void solve(int start, int total) { if(start == n) { max = Math.max(max, total); min = Math.min(min, total); return; } for(int i = 0; i < 4; i++) { if(oper[i] != 0) { oper[i]--; int temp = total; switch (i) { case 0: total += nums[start]; break; case 1: total -= nums[start]; break; case 2: total *= nums[start]; break; default: total /= nums[start]; break; } solve(start+1, total); oper[i]++; total = temp; } } } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 151. 수영장(SWExpert) (0) | 2019.04.02 |
---|---|
<Algorithm> 150. 줄기세포배양(SWExpert) (0) | 2019.04.02 |
<Algorithm> 148. 보물상자비밀번호(SWExpert) (0) | 2019.04.01 |
<Algorithm> 147. 욕심쟁이판다(BJO) (0) | 2019.03.30 |
<Algorithm> 146. 상자넣기(BJO) (0) | 2019.03.30 |
블로그의 정보
57개월 BackEnd
BFine