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 |