본문 바로가기
Study or Lecture/항해 99클럽 코딩테스트 스터디

항해 99클럽 코딩테스트 스터디 31일차 TIL (자바 / 비기너)

by yoondoo 2024. 11. 27.
728x90

<오늘의 학습 키워드>

- 정렬

<오늘의 문제>

제목 : 백준 / 실버4 / 1744번 숫자놀이

https://www.acmicpc.net/problem/1755

<풀이>

정답은 더보기

더보기
package BOJ.정렬.숫자놀이_1755.insub2004_211127;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static String[] array = new String[]{"zero","one","two","three","four","five","six","seven","eight","nine"};
    public static Map<String, Integer> maps = new HashMap<>();

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        for (int i = N; i <= M; i++) {
            String stringNumber = String.valueOf(i);

            if (stringNumber.length() == 1) {
                maps.put(array[i], i);
            } else {
                String firstNumber = String.valueOf(stringNumber.charAt(0));
                String secondNumber = String.valueOf(stringNumber.charAt(1));

                maps.put(array[Integer.parseInt(firstNumber)] + " " + array[Integer.parseInt(secondNumber)], i);
            }
        }

        List<String> sortedStringNumbers = new ArrayList<>(maps.keySet());
        Collections.sort(sortedStringNumbers);

        int cnt = 0;
        StringBuilder sb = new StringBuilder();
        for (String s : sortedStringNumbers) {
            sb.append(maps.get(s) + " ");
            cnt++;
            if (cnt == 10) {
                sb.append("\n");
                cnt = 0;
            }
        }
        System.out.println(sb);
    }

}

 

  • String클래스가 Comparable 인터페이스를 구현하고 있는걸 까먹고 있어서 어떻게 풀어낼지 한참 고민했었다.
  • String클래스는 이미 Comparable 인터페이스를 구현해 놓았다. 문자열 간의 사전식(lexicographical) 비교
  • 사전식으로 비교하기 때문에 출력할 정수 범위에 있는 숫자들을 입력 예제처럼 8 -> eight, 26 -> two six 으로 바꿔서 맵에 저장
    • ("two six" , 26) 의 형태로 맵에 저장
  • 맵의 key들을 Arraylist로 생성한 후 Collections.sort(해당 리스트)로 정렬한다.
    • 여기서 String클래스에 구현되어있는 compareTo메서드가 사용되어 사전순으로 리스트가 정렬된다.
  • 마지막으로 list를 순회하면서 map에서 get(key)해서 출력하면 정답

 

<결론, 주의할점>

  • Comparable, CompareTo 잘 알아두자
반응형

댓글