From 8e0375f8813d753d517f531b072a64f1d66cf709 Mon Sep 17 00:00:00 2001 From: 0takkk Date: Mon, 3 Oct 2022 11:20:17 +0900 Subject: [PATCH] =?UTF-8?q?Week8=20=EC=84=9C=EC=98=81=ED=83=81=20SWEA=2056?= =?UTF-8?q?58=20=EB=B3=B4=EB=AC=BC=EC=83=81=EC=9E=90=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/week8/SWEA5658TreasureBox/Solution.java | 58 +++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/week8/SWEA5658TreasureBox/Solution.java b/src/week8/SWEA5658TreasureBox/Solution.java index dce557e..7d7cc60 100644 --- a/src/week8/SWEA5658TreasureBox/Solution.java +++ b/src/week8/SWEA5658TreasureBox/Solution.java @@ -1,4 +1,62 @@ package week8.SWEA5658TreasureBox; +import java.io.*; +import java.util.*; public class Solution { + + public static int n; + public static char[] arr; + public static HashSet set; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + int t = Integer.parseInt(br.readLine()); + StringBuilder sb = new StringBuilder(); + + for (int tc = 1; tc <= t; tc++) { + st = new StringTokenizer(br.readLine()); + n = Integer.parseInt(st.nextToken()); + int k = Integer.parseInt(st.nextToken()); + + arr = br.readLine().toCharArray(); + set = new HashSet<>(); // 비밀번호가 중복되지 않도록 set을 사용 + + for(int i = 0; i < n/4; i++){ // n/4번만 돌려보면 나머지는 중복됨 + makePassword(); // 각 변의 숫자들을 합쳐서 비밀번호를 만든다. + rotate(); // 시계방향 회전 + } + + ArrayList list = new ArrayList<>(set); // set을 list로 만든 후 정렬 + Collections.sort(list); + + long ans = Long.parseLong(list.get(list.size()-k), 16); // 구하고 싶은 k번째 비밀번호를 String -> 16진수로 변경 + + sb.append("#").append(tc).append(" ").append(ans).append("\n"); + } + + System.out.println(sb.toString()); + } + + public static void makePassword(){ + int size = n/4; + for(int i = 0; i < 4; i++){ // 4개의 변에서 비밀번호 생성 + StringBuilder num = new StringBuilder(); + for(int j = i*size; j < (i+1) * size; j++){ + num.append(arr[j]); + } + set.add(num.toString()); // 생성된 비밀번호를 set에 추가 + } + } + + public static void rotate(){ + char tmp = arr[n-1]; + for(int i = n-1; i >= 1; i--){ + arr[i] = arr[i-1]; + } + arr[0] = tmp; + } + } +