[백준] 14888번 연산자 끼워넣기 리뉴얼 버전
- 알고리즘
- 2020. 9. 19. 14:50
반응형
반응형
전에는 메소드에 변수를 담아 사용했지만...
이번에는 다른 방법을 사용해봤다.
하지만 이 방법은 전에 사용했던 방법과 크게 차이는 없지만, 하나가 차이가 있다,
바로 메소드에 변수를 할당하지 않고 문제를 풀어보았다.
package _13.dfs.bfs;
import java.util.Scanner;
public class Operator3 {
static int[] op = new int[4];
static int[] maps;
static int n;
static int max = (int)(1e9 * -1);
static int min = (int)1e9;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
maps = new int[n];
for (int i = 0; i < n; i++) {
maps[i] = sc.nextInt();
}
for (int i = 0; i < 4; i++) {
op[i] = sc.nextInt();
}
solution(1, maps[0]);
System.out.println(max);
System.out.println(min);
}
private static void solution(int index, int sum) {
if (index == n) {
max = Math.max(max,sum);
min = Math.min(min,sum);
return;
}
for (int i = 0; i < 4; i++) {
if (op[i] > 0) {
op[i]--;
operate(index, sum, i);
op[i]++;
}
}
}
private static void operate(int index, int sum, int i) {
switch (i) {
case 0:
solution(index + 1, sum + maps[index]);
break;
case 1:
solution(index + 1, sum - maps[index]);
break;
case 2:
solution(index + 1, sum * maps[index]);
break;
case 3:
solution(index + 1, sum / maps[index]);
break;
}
}
}
특이한건 op[i]-- 뒤에 op[i]++이 있다.
이게 있는 이유는 현재 재귀를 통해 값을 계산하고 있다.
op값이 감소 가 되었으니 재귀문 밖으로 나오면 op값이 감소가 된 상태로 들어가게 된다.
예를들어,
나는 1 1 1 1 이런식으로 값을 넣었다고 가정해보자.
처음에는 덧셈이 들어가기 때문에 덧셈이 계산이 될테고..
뺄셈이 순차적으로 계산이 된다.
하지만, 뺄셈부터 할 수도 있다,
이를 방지하기 위해 op[i]를 이용해서 다시 원상 복구를 시켜주는것이 바로 그 이유다.
만약, 이것을 하지 않을 경우,
덧셈 -> 뺄셈 -> 곱셈 -> 나눗셈 순서로 고정이 될것이고,
곱셈부터 계산하고 싶어도 불가능해지게 된다.
그러면 자연스럽게 모든 계산식을 구할 수 있다.
사실 밑에 operate 메소드는 수정하고 싶다. 현재 어떻게 하면 합칠 수 있을까
고민중에 있다.
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 네트워크 (0) | 2020.10.26 |
---|---|
[프로그래머스] 무지의 먹방 라이브 (0) | 2020.10.17 |
[kakao & 프로그래머스] 문자열 압축 (solved: java, feat : python) (0) | 2020.09.01 |
[이것이 코팅테스트다] 게임 개발 (0) | 2020.08.31 |
[code-up] 성실한 개미 (0) | 2020.08.12 |