코드굽는 타자기

SWEA[5658] - 보물상자 비밀번호 본문

알고리즘/Simulation

SWEA[5658] - 보물상자 비밀번호

bright-jun 2020. 2. 20. 10:29

링크

SWEA[5658]

문제설명

  • 시뮬레이션

문제풀이

  • StringBuilder, Integer.parseInt(String,radix), Sort 메서드를 사용할 줄 알면 편함.
  • 회전횟수는 변의 길이만큼만 해도된다. 나머지는 다 중복임

문제코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Solution5658 {

    public static void rotate(StringBuilder sb) {
        char temp;
        temp = sb.charAt(0);
        sb.deleteCharAt(0);
        sb.append(temp);
    }
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("res/swea/5658.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int T=Integer.parseInt(br.readLine());
        for (int test_case = 1; test_case <= T; test_case++) {
            int ans=0;
            st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int K = Integer.parseInt(st.nextToken());
            int len = N/4;
            StringBuilder sb = new StringBuilder(br.readLine());

            LinkedList<String> possible = new LinkedList<>();

            int rot_num = Math.max(len, K);
            for (int i = 0; i < rot_num; i++) {
                rotate(sb);
                for (int j = 0; j < 4; j++) {
                    String temp =sb.substring(len*j, len*j+len);
                    if(!possible.contains(temp)) {
                        possible.add(temp);
                    }
                }
            }

            possible.sort(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    // TODO Auto-generated method stub
                    return Integer.parseInt(o1,16) - Integer.parseInt(o2,16);
                }
            });

            ans = Integer.parseInt(possible.get(possible.size()-K),16);

            System.out.println("#"+test_case+" "+ans);
            /*
             * 초기화
             */
        }//end test_case
    }//end main
}

아쉬운점

  • 문제 제대로 안봄
    • 1변씩 돌리는게아니라
    • 1개씩 돌림...
  • 16진법 10진법으로 변환 Integer.parseInt(String,radix) 메서드 안썼어서 찾는데 시간좀 걸렸음
  • 메서드 너무 많이 써서그런지 날로먹은거같음

잘한점

  • 16진법 10진법으로 변환 Integer.parseInt(String,radix) 메서드 사용
  • Stringbuilder로 회전 구현
  • 10진법 값을기준으로 Sort 구현

'알고리즘 > Simulation' 카테고리의 다른 글

Baekjoon[17135] - 캐슬 디펜스  (1) 2020.02.25
SWEA[2477] - 차량 정비소  (0) 2020.02.22
SWEA[4013] - 특이한 자석  (0) 2020.02.20
SWEA[5650] - 핀볼 게임  (0) 2020.02.19
SWEA[5656] - 벽돌 깨기  (1) 2020.02.19
Comments