티스토리 뷰

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo&categoryId=AWXRUN9KfZ8DFAUo&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com

풀기 전 생각

1. 한 변에 들어가는 글자수는 N/4

2. 위의 그림처럼 마지막 것이 앞으로 오고 한 변에 들어가는 글자수 (N/4)를 기준으로 문자열을 자른다. 즉 마지막 것을 앞으로 새로 넣고, 기존에 있는 것을 삭제한다.

3. 자른 값들 (즉, 생성된 문자열들)은 Arraylist에 저장한다. 이때, 중복확인을 한다.

배운 점

1. 처음에는 linked list를 생각했지만 StringBuffer로 쉽게 풀 수 있었다. StringBuffer를 사용하여 중간 삽입과 문자열 자르기를 하였다. 

2. 16진수를 10수로 바꾸는 것도 생각보다 간단했다. -> Integer.valueOf(str, 16); 를 하면 str을 16진수로 인식해 10진수로 바꿔준다.


코드

package swexpert.SWtest;

import java.util.*;

public class 보물상자비밀번호_SWTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int tc = sc.nextInt();
        for (int t = 1; t <= tc; t++) {
            int n = sc.nextInt();
            int k = sc.nextInt();

            String tmp = sc.next();
            StringBuffer data = new StringBuffer(tmp);
            ArrayList<String> nums = makePwd(data, n);

            System.out.println("#" + t + " " + changeTo10(nums.get(k - 1)));


        }
    }

    private static ArrayList<String> makePwd(StringBuffer data, int n) {
        int rotationCnt = n / 4;
        ArrayList<String> nums = new ArrayList<String>();
        for (int i = 0; i < rotationCnt; i++) {
            //data 잘라서 암호 만들기 (nums에 넣기)
            for (int j = 0; j < n; j += rotationCnt) {
                String str = data.substring(j, j + rotationCnt);
                if (!nums.contains(str))
                    nums.add(str);
            }
            //마지막 글자 앞으로 이동하기
            String del = data.substring(data.length() - 1, data.length());
            data.insert(0, del);
            data.deleteCharAt(data.length() - 1);
        }
        Collections.sort(nums, Collections.reverseOrder());
        return nums;
    }

    private static int changeTo10(String str) {
        //16진수 10진수로 바꾸기
        return Integer.valueOf(str, 16);
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함