🚀 문제 - 14888번

연산자 끼워 넣기

난이도 : 실버 1

문제 링크 -> https://www.acmicpc.net/problem/14888

내가 시도 해본 코드


// 내림차순 정렬 후 * + - / 으로 max 값 
// 내림차순 정렬 후 / - + * 로 최소값 하려고했지만 전혀 다른 내용의 문제였다. 

문제 해결 코드

```java

package BOJ.BruteForce.silver;

import java.util.Arrays; import java.util.Collections; import java.util.Scanner;

public class 연산자끼워넣기_14888 {

static int n;
static int[] arr;
static int[] operator;
static int MAX = Integer.MIN_VALUE;
static int MIN = Integer.MAX_VALUE;

public static void main(String[] args) {

	Scanner sc = new Scanner(System.in);

	n = sc.nextInt();
	arr = new int[n];
	operator = new int[4];

	for (int i = 0; i < n; i++) {
		arr[i] = sc.nextInt();
	}

	// 연산자 입력
	for (int i = 0; i < 4; i++) {
		operator[i] = sc.nextInt();
	}

	dfs(arr[0], 1);

	System.out.println(MAX);
	System.out.println(MIN);

}

public static void dfs(int num, int idx) {
	if (idx == n) {
		System.out.println("aaa");
		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 + arr[idx], idx + 1);
				break;
			case 1:
				dfs(num - arr[idx], idx + 1);
				break;
			case 2:
				dfs(num * arr[idx], idx + 1);
				break;
			case 3:
				dfs(num / arr[idx], idx + 1);
				break;

			}

			// 재귀 호출이 종료되면 다시 해당 연산자 개수를 복구한다.
			operator[i]++;
		}

	}

}

}

```

문제를 풀면서 !

  • 백트래킹 문제고 풀지 못해서 재귀와 백트래킹에 대해 공부를 했다.
  • 아직은 절차지향에 익숙해서 선언적 프로그래밍이 익숙하지 않지만 여러 유형을 풀어봐야겠다
  • 3 4 5 와 1 0 1 0 예시에서 + 다음 * 처리의 값을 저장해두는것은 이해했지만 다시 돌아와서 dfs(num,idx)에서 나머지 for문 인덱스 1부터 3까지 깊이를 추가해가며 연산하는과정을 이해하는데 오래걸렸다…
  • 빨리 잘해지고싶다.



😵 공지 사항 개인 학습을 위한 블로그입니다. 잘못된 정보가 있을 경우 언제든지 지적해주시면 감사하겠습니다. 😵