본문 바로가기

알고리즘

[SWEA] SWEA5658 - 보물상자 비밀번호 (JAVA)

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

import java.util.*;
import java.io.*;

public class Solution
{
    static int T;
    static int N,K;
    static ArrayList<Character> numList;
    static TreeSet<Integer> treeSet = new TreeSet<>();
    static void run(){
        int side = N/4; //한 변에 들어가는 문자 수
        int rotate = side - 1; //회전 수

        //초기 상태
        getPass(side);

        //rotate
        for(int i=0;i<rotate;i++){
            //제일 뒤에꺼빼서 제일 앞에 넣기
            char move = numList.get(numList.size()-1);
            numList.add(0,move);
            numList.remove(numList.size()-1);
            getPass(side);
        }
    }

    static void getPass(int n){
        for(int i=0;i<=numList.size()-n;i=i+n){
            String tmp="";
            for(int j=0;j<n;j++){
                tmp+=numList.get(i+j);
            }
            treeSet.add(Integer.parseInt(tmp,16));
        }
    }

    public static void main(String args[]) throws Exception
    {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       T = Integer.parseInt(br.readLine());

       for(int i=1;i<=T;i++){
           numList = new ArrayList<>();
           treeSet = new TreeSet<>();
           StringTokenizer st = new StringTokenizer(br.readLine());
           N = Integer.parseInt(st.nextToken());
           K = Integer.parseInt(st.nextToken());

           String tmp = br.readLine();
           for(int j=0;j<N;j++){
               numList.add(tmp.charAt(j));
           }

           run();
           ArrayList<Integer> getAnswer = new ArrayList<>(treeSet);
           Collections.sort(getAnswer, (o1,o2) -> o2 - o1); // 내림차순 정렬
           System.out.println("#"+i+" "+getAnswer.get(K-1));
       }
    }
}

HEX to Integer

Integer.parseInt(String s, int n);

* n : 진수

 

ArrayList

ArrayList 원하는 인덱스에 원소 추가 가능, 추가 후 인덱스 하나씩 밀림.

삭제 후 인덱스 하나씩 당겨짐.

 

Set은 바로 정렬 X. List로 바꾸고 정렬해야함