반응형
이문제는 단순 구현문제이다.
배열을 순환하는 방법은 크게 두가지가 있다. 첫번째로 인덱스를 이용하여 인덱스가 배열크기를 넘어가면 0으로 바꿔주면서 순환하는 방법과 두번째로 List를 사용하여 첫번째원소를 맨뒤에 붙이면서 순환하는 방법이 있다. 이 문제를 품에 있어 인덱스를 사용하는 방식을 사용하였고, 3중포문을 이용하여 문제를 해결하였다.
또 이문제에서는 중복체크를 하는 과정이 있는데, 순서가 있는 중복체크를 할때에는 TreeSet을 이용하면 된다. 또한, TreeSet에 순서정하는 방식을 정할땐 다음과 같이 comparator를 선언해주면 된다.
set=new TreeSet<>(new Comparator() {
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
});
Set에 대해 간단히 정리하자면 크게 3가지가 있다.
1. HashSet : 순서가 필요없는 데이터를 hashTable에 저장. set중 성능 최고.
2. TreeSet : 저장된 데이터의 값에 따라 정렬. HashSet보다 성능 하위.
3. LinkedHashSet : 연견될 목록 타입으로 hashTable에 데이터 저장. 저장된 순서에 따라 값이 정렬. set중 성능 최하.
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
|
package swea;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class Solution_5658_보물상자비밀번호 {
static int N;
static int target;
static int word;
static char[] chars;
static Set<Integer> set;
public static void main(String[] args) throws Exception {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T=Integer.parseInt(br.readLine());
for(int tc=1;tc<=T;tc++) {
st=new StringTokenizer(br.readLine());
N=Integer.parseInt(st.nextToken());
target=Integer.parseInt(st.nextToken());
String str= br.readLine();
chars=new char[str.length()];
for(int i=0;i<str.length();i++)
chars[i]=str.charAt(i);
set=new TreeSet<>(new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
});
word=N/4;
for(int loop=0;loop<word;loop++) {
for(int start=0;start<str.length();start=start+word) {
String temp="";
for(int index=0;index<word;index++) {
int i=loop+start+index;
if(i>=str.length()) {
i=i-str.length();
}
temp+=chars[i];
}
// System.out.print(temp+" ");
set.add(Integer.parseInt(temp,16));
}
}
int i=0;
for(int num : set) {
i++;
if(i==target) {
System.out.println("#"+tc+" "+num);
break;
}
}
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
반응형
'Algorithm' 카테고리의 다른 글
[SWEA] 6019. 추억의 2048게임 (0) | 2020.04.30 |
---|---|
[SWEA] 4050. 재관이의 대량 할인 (0) | 2020.04.30 |
[Programmers] 불량 사용자 (0) | 2020.04.28 |
[Programmers] 튜플 (0) | 2020.04.27 |
[Programmers] 크레인 인형뽑기 게임 (0) | 2020.04.27 |