P14888: 연산자 끼워넣기

wnajsldkf·2022년 10월 15일
0

Algorithm

목록 보기
9/58
post-thumbnail

설명

  1. 연산을 돌면서 연산자 자리수에 채워넣는다.
  2. 연산자는 배열로 저장해둔다.
  3. 앞에수랑 결과는 바로 저장해서 업데이트한다.

코드

public class P14888 {
	public static int MAX = Integer.MIN_VALUE;	// 가장 작은 숫자보다는 무조건 크고
    public static int MIN = Integer.MAX_VALUE;	// 가장 큰 숫자보다는 무조건 작고
    public static int[] operator = new int[4];	// 연산자 개수
    public static int[] number;
    public static int N;
    
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
		StringTokenizer st = new StringTokenizer(br.readLine());
        
        N = Integer.parseInt(st.nextToken());
        number = new int[N];
        
        st = new StringTokenizer(br.readLine());
        
        // 숫자 입력
        for (int i = 0; i < N; i++) {
        	number[i] = Integer.parseInt(st.nextToken());
		}
        
        st = new StringTokenizer(br.readLine());
        
        // 연산자 개수를 연산자 배열에 저장
        // 인덱스별로 순서를 갖는다.
        for (int i = 0; i < 4; i++) {
        	operator[i] = Integer.parseInt(st.nextToken());
		}            
        
        dfs(number[0], 1);	// 첫번째 숫자부터 연산을 어떻게 할지 결정한다.
        
        System.out.println(MAX);
        System.out.println(MIN);
	}
    
    public static void dfs(int num, int depth) {
    	if (depth == N) {
        	MAX = Math.max(MAX, num);
            MIN = Math.min(MIN, num);
            
            return;
		}
        
        for (int i = 0; i < 4; i++) {
        	if (operator[i] > 0) {
            	// 해당 연산자 개수 줄이기
            	operator[i]--;
                switch (i) {
                	case 0:
                    	dfs(num + number[depth], depth + 1);
                        break;
					case 1:
                    	dfs(num - number[depth], depth + 1);
                        break;
					case 2:
                    	dfs(num * number[depth], depth + 1);
                        break;
					case 3:
                    	dfs(num / number[depth], depth + 1);
                        break;
				}
                // 다시 늘리기 -> 나중에 써야하니까
                operator[i]++;
			}
		}
	}
}	    
profile
https://mywnajsldkf.tistory.com -> 이사 중

0개의 댓글