728x90
반응형
문제 풀이
- 같은 숫자일 경우 중복을 제거한 후 정렬이 필요하기 때문에 TreeSet을 이용했다.
마름모형태로 한 변에 각각 같은 개수의 숫자가 오기 때문에 n개를 4로 나누어서 시계방향으로 돌릴때 n / 4 번째 돌리면 결국 처음 상태와 같아진다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;
import java.util.stream.IntStream;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
sc.nextLine();
for(int test_case = 1; test_case <= T; test_case++)
{
String key = sc.nextLine();
int n = Integer.parseInt(key.split(" ")[0]);
int k = Integer.parseInt(key.split(" ")[1]);
String caseStr = sc.nextLine();
char[] arr = new char[caseStr.length()];
int x = n / 4;
List<String> list = new ArrayList<>();
for(int i = 0; i < x; i++) {
String resStr = caseStr.substring(caseStr.length() - i) + caseStr.substring(0, caseStr.length() - i);
String arrs[] = IntStream.iterate(0, j -> j + x)
.limit((resStr.length() +x - 1) / x)
.mapToObj(j -> resStr.substring(j, Math.min(j + x, resStr.length()))).toArray(String[]::new);
list.addAll(Arrays.asList(arrs));
}
TreeSet<String> sets = new TreeSet<>(Comparator.reverseOrder());
sets.addAll(list);
int i = 0;
for(String set : sets) {
i++;
if(i == k) {
int result = Integer.parseInt(set, 16);
System.out.println("#"+ test_case + " " + result);
}
}
}
}
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
SW Expert Academy 1210. S/W 문제해결 기본 2일차 Ladder1(java) (1) | 2024.03.15 |
---|---|
SW Expert 1859. 백만장자프로젝트 (Java) (0) | 2024.03.15 |
[프로그래머스] 가장 가까운 같은 글자 JAVA 풀이 (0) | 2023.01.01 |
프로그래머스 - 문자열 나누기 (java) (0) | 2022.12.03 |
백준 2579번 계단 오르기 자바풀이 (1) | 2022.12.03 |