본문 바로가기

코딩테스트

[JAVA-D3] SWEA 1221 - GNS

728x90
 

SW Expert Academy

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

swexpertacademy.com

 

✅ 문제 요약

0~9인 숫자를 String형식으로 나타낸 새로운 숫자체계가 있다고 가정했을 때,

새로운 숫자체계들을 입력 받았을 때 오름차순 정렬한 결과를 출력하라

 

🤔 문제 풀이

0~9까지의 새로운 String 숫자 체계를 10진수에 매핑하여 치환하고 Arrays.sort 로 오름차순

정렬해준 뒤, 다시 10진수를 String 숫자 체계에 매핑하여 치환해주는 방식을 채택했다.

매핑해주는 방법은 switch-case 방식으로 "ZRO" -> 0, 3 -> "THR" 같은 형식으로 치환해주었다.

 

개인적으로 else-if 반복과 switch-case 방식은 코드길이가 길어져서 선호하지 않지만

더 깔끔하고 간단한 풀이법이 떠오르지 않아 간단한 방법을 채택하기로 했다..

 

🚨CODE

import java.util.*;
import java.io.*;
 
public class Solution {
    static int[] arr;
    static String[] answer;
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int testCase = Integer.parseInt(br.readLine());
 
        for (int t = 1; t <= testCase; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            StringBuilder sb = new StringBuilder();
            String testCaseNumber = st.nextToken();
            sb.append(testCaseNumber).append("\n");
             
            int len = Integer.parseInt(st.nextToken());
            st = new StringTokenizer(br.readLine());
            arr = new int[len];
            answer = new String[len];
 
            for (int i = 0; i < len; i++) {
                String newNumber = st.nextToken();
                newNumberToDecimal(newNumber, i);
            }
            Arrays.sort(arr);
            decimalToNewNumber(arr);
             
             
            for(String num : answer) {
                sb.append(num).append(" ");
            }
            bw.write(String.format("%s", sb.toString()));
        }
        bw.flush();
    }
 
    public static void newNumberToDecimal(String newNumber, int idx) {
        switch (newNumber) {
        case "ZRO":
            arr[idx++] = 0;
            break;
        case "ONE":
            arr[idx++] = 1;
            break;
        case "TWO":
            arr[idx++] = 2;
            break;
        case "THR":
            arr[idx++] = 3;
            break;
        case "FOR":
            arr[idx++] = 4;
            break;
        case "FIV":
            arr[idx++] = 5;
            break;
        case "SIX":
            arr[idx++] = 6;
            break;
        case "SVN":
            arr[idx++] = 7;
            break;
        case "EGT":
            arr[idx++] = 8;
            break;
        case "NIN":
            arr[idx++] = 9;
            break;
        }
    }
 
    public static void decimalToNewNumber(int[] arr) {
        int idx = 0;
        for (int i = 0; i < arr.length; i++) {
            switch (arr[i]) {
            case 0:
                answer[idx++] = "ZRO";
                break;
            case 1:
                answer[idx++] = "ONE";
                break;
            case 2:
                answer[idx++] = "TWO";
                break;
            case 3:
                answer[idx++] = "THR";
                break;
            case 4:
                answer[idx++] = "FOR";
                break;
            case 5:
                answer[idx++] = "FIV";
                break;
            case 6:
                answer[idx++] = "SIX";
                break;
            case 7:
                answer[idx++] = "SVN";
                break;
            case 8:
                answer[idx++] = "EGT";
                break;
            case 9:
                answer[idx++] = "NIN";
                break;
            }
        }
    }
 
}
728x90
반응형