<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 |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 150. 줄기세포배양(SWExpert) (0) | 2019.04.02 |
---|---|
<Algorithm> 149. 숫자만들기(SWExpert) (0) | 2019.04.01 |
<Algorithm> 147. 욕심쟁이판다(BJO) (0) | 2019.03.30 |
<Algorithm> 146. 상자넣기(BJO) (0) | 2019.03.30 |
<Algorithm> 145. 균형점(SWExpert) (0) | 2019.03.29 |
블로그의 정보
57개월 BackEnd
BFine