Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 데이터베이서
- reshape
- 생활코딩
- Database
- 야학
- 판다스
- JavaScript
- 파이썬
- 데이터베이스 개론
- 연산자
- Python
- Java
- 생활코딩 데이터베이스
- 머신러닝
- CNN
- flatten
- MySQL
- LeNet
- 카카오클라우드스쿨2기
- 머신러닝야학
- pandas
- 딥러닝
- 생활코딩 머신러닝야학
- 데이터베이스
- tensorflow
- 개발자
- 머신러닝(딥러닝)
- 이것이 자바다
Archives
- Today
- Total
IT's 우
[Java] 백준 - 연산자 끼워넣기 본문
728x90
📖 풀이한 문제
채점 현황
www.acmicpc.net
💡 문제에서 사용된 알고리즘
- DFS
📜 코드 설명
- DFS를 사용해서 문제를 해결했다. (모든 결과를 도출해야 하므로 DFS를 사용했다.)
- method 배열: 연산자의 개수
- getResult 메소드: 해당 연산자를 사용한 연산의 결과를 리턴
- 클래스 ME: 연산의 결과값과 method과 인덱스(A 연산할 숫자 인덱스)
- 메서드 DFS : 4가지 연산자를 사용하여 연산자를 해준다(method에 연산자의 개수가 있더라면) cnt를 사용하여 연산이 끝났더라면 max와 min을 구해주고 연산이 남았더라면 다시 재귀로 연산을 넘겨준다.
📜 코드
import java.io.*;
import java.util.*;
public class 연산자끼워넣기 {
static int max = Integer.MIN_VALUE;
static int min = Integer.MAX_VALUE;
static int [] A;
static int N;
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
A = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
// A 배열 받기
for (int i = 0; i < N; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
// 연산자 개수 받기
int method [] = new int[4];
for (int i = 0; i < 4; i++) {
method[i] = Integer.parseInt(st.nextToken());
}
// 재귀로 문제 풀이
DFS(new ME(A[0], method, 1));
System.out.println(max);
System.out.println(min);
}
private static void DFS (ME m) {
// 4가지 연산을 넣어주기위한 반복문
for (int i = 0; i < 4; i++) {
// m.method[i]가 0인 경우 연산자의 개수가 없으므로 넘어가기
if (m.method[i] == 0) continue;
// 있다면
else {
// result에 해당 연산을 한 결과를 getResult 메소드를 사용해서 받아준다.
int result = getResult(m.result, A[m.cnt], i);
// 연산이 모두 끝났다면 max와 min 값을 찾아준다.
if (m.cnt + 1 == N) {
max = Math.max(max, result);
min = Math.min(min, result);
return;
}
// 연산이 남았더라면 재귀를 사용하여 다음 연산으로 보내준다.
else {
m.method[i]--;
DFS(new ME(result, m.method, m.cnt + 1));
}
m.method[i]++;
}
}
}
private static int getResult (int a, int b, int idx) {
if (idx == 0) return a + b;
else if (idx == 1) return a - b;
else if (idx == 2) return a * b;
else return a / b;
}
private static class ME {
int result;
int method[];
int cnt;
ME(int result, int[] method, int cnt) {
this.result = result;
this.method = method;
this.cnt = cnt;
}
}
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[java] 백준 - 문자열 집합 (0) | 2023.08.24 |
---|---|
[java]백준 2852번 NBA 농구 (0) | 2023.05.18 |
[java]백준 14015번 퇴사 (0) | 2023.03.30 |
[java]백준 1068번: 트리(트리, DFS) (0) | 2022.11.06 |
[java]백준 11725- 트리의 부모 찾기, 트리 and DFS 깊이우선탐색 (0) | 2022.11.05 |