어흥
[SWEA 5658] 보물상자 비밀번호 (Java) 본문
728x90
반응형
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo
1. 주의할 점
- 회전의 수가 최대 3번이 아니다
- 회전시, 맨 뒤의 숫자가 맨 앞에 추가되는것
- 숫자가 커질 수 있으므로 Long으로 지정한다
2. 구현
- String으로 받은 후, Treeset에 대입하여 중복제거 + 오름차순 정렬로 되도록 설정한다
- Rot() 함수가 회전을 담당한다
- Treeset은 오름차순으로 정렬되어 있으므로, Set.size()-k의 위치에 있는 원소를 출력한다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class Solution_5658_보물상자비밀번호 {
static Set<Long> set;
static String str;
static void rot() {
char c = str.charAt(str.length()-1);
String sub = str.substring(0,str.length()-1);
str = c+sub;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int test = Integer.parseInt(br.readLine().trim());
for (int t = 1; t <= test; t++) {
set = new TreeSet<Long>();
int len, k;
String s = br.readLine();
StringTokenizer st = new StringTokenizer(s);
len = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
str = br.readLine().trim();
for (int i = 0; i <= len/4; i++) {
int vv=len/4;
for(int j=0;j<4;j++) {
String s1=str.substring(j*vv,(j+1)*vv);
long ll = Long.parseLong(s1,16);
set.add(ll);
}
rot();
}
Iterator<Long> itr = set.iterator();
long l1,ans=0;
int cnt=0;
while (itr.hasNext()) {
l1=itr.next();
if(cnt==set.size()-k) {
ans=l1;
break;
}
cnt++;
}
System.out.println("#"+t+" "+ans);
}
}
}
728x90
반응형
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA 6109] 추억의 2048게임 (JAVA) (0) | 2020.04.29 |
---|---|
[SWEA 4050] 재관이의 대량 할인 (JAVA) (0) | 2020.04.29 |
[SWEA 1767] 프로세서 연결하기 (C++) (0) | 2020.04.26 |
[SWEA 5215] 햄버거 다이어트 (JAVA) (0) | 2020.04.23 |
[SWEA 1263] 사람 네트워크2 (Dijkstra, Floyd-Warshall)(JAVA) (0) | 2020.04.10 |
Comments