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;
}
}

 

+ Recent posts