티스토리 뷰
1) 생각
N개의 숫자와 N-1개의 연산자가 주어집니다.
조건은 다음과 같습니다.
1) 연산자의 종류에 상관없이 앞에서부터 계산을 합니다.
2) 숫자는 바뀌지 않고 읽어들인 순서대로 쭉 갑니다.
이 때, 연산자를 이리저리 넣어봤을 때 최소값과 최대값을 출력하시오.
연산결과의 범위가 -10억 ~ 10억 이므로 int형 변수를 선언하여도 풀이가 가능합니다.
연산자를 숫자사이에 이리저리 넣어봤을 때 최소값과 최대값을 출력해야하므로 어떤게 최소값과 최대값이 될지 모릅니다.
주어진 시간초가 2초이고 N의 개수의 최대값이 11 이므로 모든 조건을 따져보아도 시간내 탐색이 가능합니다.
2) 방안
DFS를 통해 + - * / 의 경우를 해당 숫자 카운트를 하면서 하나씩 들어가서 모두 탐색해주었습니다. 탐색을 처음 시작할 경우 맨 앞의 숫자 고정을 위해 Index 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main{ static int[] arr,cul; static int n; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n = Integer.parseInt(br.readLine()); arr = new int[n]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i=0;i<n;i++) arr[i] = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); cul = new int[4]; // 더하기 빼기 곱하기 나누기 for(int i=0;i<4;i++) cul[i] = Integer.parseInt(st.nextToken()); max = Integer.MIN_VALUE; min = Integer.MAX_VALUE; solve(cul[0],cul[1],cul[2],cul[3],arr[0],1); System.out.println(max); System.out.println(min); } static int max; static int min; private static void solve(int plus,int minus,int mul,int div,int result,int idx) { if(idx==n) { max = Math.max(max, result); min = Math.min(min, result); return; } // 더하기 if(plus>0) { solve(plus-1,minus,mul,div,result+arr[idx],idx+1); } // 빼기 if(minus>0) solve(plus,minus-1,mul,div,result-arr[idx],idx+1); // 곱하기 if(mul>0) solve(plus,minus,mul-1,div,result*arr[idx],idx+1); // 나누기 if(div>0) solve(plus,minus,mul,div-1,result/arr[idx],idx+1); } } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9095번 1, 2, 3 더하기 (0) | 2018.08.22 |
---|---|
[백준] 14889번 스타트와 링크 (0) | 2018.08.22 |
[백준] 6603번 로또 (0) | 2018.08.21 |
[백준] 10971번 외판원 순회 2 (0) | 2018.08.21 |
[백준] 2193번 이친수 (0) | 2018.08.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday