최's 먹공로그
JUNGOL1018_십자카드 문제 본문
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=297&sca=50&sfl=wr_hit&stx=1018&sop=and
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 |
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
private static HashSet<Integer> time_number_list;
private static ArrayList<Integer> set_list;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 모든 시계수를 저장하고 시작
String[] set = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; // 중복순열
time_number_list = new HashSet();
set_list = new ArrayList<>();
time_number(set, 0, 0);
ArrayList<Integer> arr2 = new ArrayList<>(time_number_list);
Collections.sort(arr2);
// 입력된 값에서 min값 찾고 arr2에서 값 찾아서 그때의 인덱스+1값 출력
StringTokenizer st = new StringTokenizer(br.readLine().trim(), " ");
int[] arr = new int[4];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// 배열4개 원소를 십자 규칙에 맞게 tmp에 만들고 그 중에서 min값을 저장
int min = Integer.MAX_VALUE;
for (int i = 0; i < 4; i++) {
int tmp = 0;
for (int j = 0; j < 4; j++) {
// 십자카드가 2 1 1 2 일때 , 2112 1122 1221 2211 이렇게 4개의 숫자를 만드는 과정
// 4개의 숫자 중에서 가장 작은 값을 저장
tmp = (tmp * 10) + arr[(i + j) % 4];
}
if(min > tmp)
min = tmp;
}
// 출력
for (int i = 0; i < arr2.size(); i++) {
if(arr2.get(i) == min) {
System.out.println(i+1);
return;
}
}
} // end of main
private static void time_number(String[] set, int idx, int t) {
if(idx == 4) {
// 만들어진 한개의 순열 = 십자카드 한개 , 십자카드 한개에서 최소값을 hashset에 저장(중복제거)
int min = Integer.MAX_VALUE;
for (int i = 0; i < 4; i++) {
int tmp = 0;
for (int j = 0; j < 4; j++) {
tmp = (tmp * 10) + set_list.get((i + j) % 4);
}
if(min > tmp)
min = tmp;
}
time_number_list.add(min);
return;
}
for (int i = 0; i < set.length; i++) {
set_list.add(Integer.parseInt(set[i]));
time_number(set, idx+1, i);
set_list.remove(set_list.size() - 1);
}
} // end of time_number
} |
cs |
'APS' 카테고리의 다른 글
BOJ17142_연구소3 (0) | 2019.05.07 |
---|---|
BOJ16235_나무 재테크 (4) | 2019.04.11 |
BOJ14502_연구소 (3) | 2019.03.14 |
BOJ7569_토마토 (0) | 2019.03.12 |
BOJ7576_토마토 (0) | 2019.03.12 |