SWEA

SWEA 1221 [S/W 문제해결 기본] 5일차 - GNS

리콜 2023. 10. 30. 22:25

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

 

SW Expert Academy

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

swexpertacademy.com

문제는

어느 행성에서 사용하는 숫자체계인 "ZRO", "ONE", "TWO", "THR", "FOR", "FIV", "SIX", "SVN", "EGT", "NIN"

을 임의의로 섞어서 주어지는데

작은수 부터 차례로 정렬하는 것이다.

"TWO NIN TWO TWO FIV FOR" 가 주어지면

"TWO TWO TWO FOR FIV NIN" 로 바꾸는 것이다.

 

처음에는 몇번의 테스트 케이스가 주어지는 지 주어지고

이를 T에 저장한다.

 

그뒤 for문을 T만큼 반복시키며 그안에 구현을 하는데 

각케이스 마다 테스트 케이스 길이가 주어진뒤

테스트 케이스가 주어진다. 

 

하나의 공백으로 단어가 구분되어있다.

 

#1 7041
SVN FOR ZRO NIN FOR EGT EGT TWO FOR FIV FIV ONE SVN ONE ONE FIV TWO SVN SIX ONE FOR TWO THR TWO TWO ONE SIX EGT FIV SVN SIX ONE EGT NIN TWO SVN NIN FIV FOR THR ONE TWO THR THR FOR ONE ONE THR EGT SVN FOR TWO SVN SVN NIN THR ONE NIN EGT SIX FIV ZRO TWO EGT SIX ZRO TWO FOR EGT SIX FIV ZRO NIN ZRO ZRO SIX ONE THR EGT NIN THR FOR FOR SIX ZRO SIX SIX ONE...

 

해결한 코드는

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.StringTokenizer;

public class Solution {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for(int test_case = 1; test_case <= T; test_case++) {
            LinkedHashMap<String, Integer> count = new LinkedHashMap<String, Integer>(10){{
                put("ZRO", 0);
                put("ONE", 0);
                put("TWO", 0);
                put("THR", 0);
                put("FOR", 0);
                put("FIV", 0);
                put("SIX", 0);
                put("SVN", 0);
                put("EGT", 0);
                put("NIN", 0);
            }};
            StringTokenizer st = new StringTokenizer(br.readLine()," ");
            st.nextToken();
            int n = Integer.parseInt(st.nextToken());
            StringTokenizer st2 = new StringTokenizer(br.readLine(), " ");

            while(st2.hasMoreTokens()){
                String key = st2.nextToken();
                count.put(key, count.get(key) +1);
            }
            StringBuilder sb = new StringBuilder();

            for(Entry<String, Integer> entry : count.entrySet()){
                int value = entry.getValue();
                while(value > 0){
                    sb.append(entry.getKey()).append(" ");
                    value--;
                }
            }
            System.out.println("#" + test_case);
            System.out.println(sb);
        }
    }
}

이고 LinkedHashMap을 사용하여 간단하게 구현하였다.

각 BufferedReader로 읽기 때문에 사실 주어지는 테스트 케이스 길이는 별로 필요없고

StringTokenizer로 공백기준으로 나누어 사용하였다.

 

또한 LinkedHashMap으로 기존 hashmap과 다르게 순서대로 출력되는데 이를 간편하게 하기 위해 hashMap 출력하는데 쓰는 keySet()과 entrySet()중 entrySet()으로 키값과 데이터 값 모두 접근하여 출력하였다.

 

반응형