You will be fine

<Algorithm> 148. 보물상자비밀번호(SWExpert)

by BFine
반응형

1. 보물상자비밀번호(SWExpert)

  • 문자열 처리, 자료구조 문제

  • 진법변환하는 메서드를 직접 만들어서 풀었는데 parseInt(문자열,진수) 하면 한줄로 변환하는게 가능했다.. 

  • 다른 사람의 코드를 봤는데 TreeSet을 이용해서 약간 놀랐다. 처음에는 나도 Set을 쓰려고 했는데 저장순서가 없어서 쓰지 않았다.

  • 생각해보면 저장 순서와는 전혀 관련없는 정렬문제인데 좀 착각한것 같다. TreeSet에 경우 정렬과 검색이 빠르다.(중복저장X)

  • parseInt와 TreeSet을 쓰니 코드의 거의 반을 줄일 수 있었다...

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
 
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int testCase = Integer.parseInt(br.readLine());
        /******************************
         * String의 subString을 이용하여
         * 한칸씩 미루는 방법으로 나누기 4한 만큼의
         * 변의 숫자를 구하고 sort 통해 k번째
         * 수를 구한다.
         *******************************/
        alpa['A'-'0'= 10;alpa['B'-'0'= 11;alpa['C'-'0'= 12;
        alpa['D'-'0'= 13;alpa['E'-'0'= 14;alpa['F'-'0'= 15;
        //System.out.println(alpa['A'-'0']);
        for(int i = 0; i < 10; i++) alpa[i] = i;
        StringBuilder sb = new StringBuilder("");
        for(int t = 1; t <= testCase; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int k = Integer.parseInt(st.nextToken());
            List<Integer> list = new LinkedList<>();
            String str = br.readLine();
            int rotation = n/4;
            
            for(int i = 0; i < rotation; i++) {
                for(int j = 0; j < n ; j+=rotation) {
                    String temp = str.substring(j, j+rotation);
                    //System.out.println(temp);
                    char[] charArr= temp.toCharArray();
                    int parse10 = to10(charArr);
                    //System.out.println(parse10);
                    if(!list.contains(parse10)) {
                        list.add(parse10);
                    }
                }
                str = str.substring(1, str.length())+str.substring(0,1);
            }
            
            Collections.sort(list,Collections.reverseOrder());
            sb.append("#"+t+" "+list.get(k-1)+"\n");
        }
        System.out.println(sb.toString());
    }
    static int[] alpa = new int[100];
    public static int to10(char[] charArr) {
        int total = 0;
        for(int i = charArr.length-1,u=0; i >= 0; i--,u++) {
            total+= alpa[charArr[i]-'0']*Math.pow(16, u);
        }
        //System.out.println(total + " 변환");
        return total;
    }
}
 
cs

참고 & 출처  




반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기