https://www.acmicpc.net/problem/2659
코드설명
브루트포스(BruteForce, 완전탐색) 알고리즘입니다.
문제풀면서 생각났던점들은,
아래의 재귀들은 모두 For문으로 처리가 가능합니다.
그래도 재귀형식으로 푸는 것이 더 깔끔하고, 코드가 더 줄어들기에 재귀형식으로 풀었습니다.
코드
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
private static int N, T, M;
private static int answer = 0;
private static int[] arr;
private static int standard = 0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//평균값을 구하고, 그 값과 가장 가까운값.
arr = new int[4];
for(int i=0;i<4;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
standard = clockNumber(new ArrayList<Integer>(), arr, 0, 0);;
ArrayList<Integer> tempArr = new ArrayList<Integer>();
for(int i=1;i<4; i++) {
tempArr.clear();
standard = Math.min(standard, clockNumber(tempArr, arr, 0, i));
}
comb(0);
System.out.println(answer + 1);
}
private static HashSet<Integer> hashset = new HashSet<Integer>();
private static int[] comb = new int[4];
private static void comb(int level) {
if(level == 4) {
int standardClock = clockNumber(new ArrayList<Integer>(), comb, 0, 0);
for(int i=1; i<4; i++) {
standardClock = Math.min(standardClock, clockNumber(new ArrayList<Integer>(), comb, 0, i));
}
if(hashset.contains(standardClock) == false && standardClock < standard) {
answer += 1;
hashset.add(standardClock);
}
return ;
}
for(int i=1; i<=9; i++) {
comb[level] = i;
comb(level + 1);
}
}
public static int clockNumber(ArrayList<Integer> target, int[] num, int level, int idx) {
if(level == 4) {
return convertToInt(target);
}
target.add(num[idx++]);
if(idx == 4) {
idx = 0;
}
return clockNumber(target, num, level + 1, idx);
}
private static int convertToInt(ArrayList<Integer> target) {
int digit = 3;
int num = 0;
for(int v : target) {
num += v * Math.pow(10, digit--);
}
return num;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9659 돌 게임 5 - 동적계획법(DP, Dynamic Programming) + 게임이론(Game Theory) + 수학(Math) JAVA (0) | 2024.07.29 |
---|---|
[백준] 9658 돌 게임 4 - 동적계획법(DP, Dynamic Programming) + 게임이론(Game Theory) JAVA (0) | 2024.07.29 |
[백준] 2548 대표 자연수 - 정렬(Sorting) + 수학(Math) JAVA (0) | 2024.07.28 |
[백준] 2108 통계학 - 구현(Implementation) + 정렬(Sorting) JAVA (0) | 2024.07.28 |
[백준] 1485 정사각형 - 기하학(Geometry) + 정렬(Sorting) JAVA (0) | 2024.07.27 |