[99클럽 31일차] [백준] 1755. 숫자놀이

Dev.Dana·2024년 11월 27일
0

Algorithm

목록 보기
23/25
post-thumbnail

문제 접근

이 문제를 보면 숫자 -> 영어로 바꿔서 정렬을 하고 그 순서대로 숫자 리스트를 정렬하는게 목표이다.

문제 해결 과정

  1. 숫자의 각 자릿수를 영어로 변환한다.
  2. 변환된 단어를 공백으로 연결해서 하나의 단어로 만든다
  3. 변환된 영어 단어를 기준으로 숫자를 정렬한다.
    -> 이를 해결하기 위해서 영어단어와 숫자를 함께 저장했다.
  4. 10개씩 출력하기 위해서 조건문 분기처리를 한다.

코드 확인하기

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer stk = new StringTokenizer(br.readLine());
        int M = Integer.parseInt(stk.nextToken());
        int N = Integer.parseInt(stk.nextToken());

        String[] numberlist = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

        List<String> list = new ArrayList<>();

        for (int i = M; i <= N; i++) {
            String word = convert(i, numberlist);
            list.add(word + i);
        }

        Collections.sort(list);

        int count = 0;
        for (String s : list) {
            if (count % 10 == 0 && count != 0){
                bw.write("\n");
                }

            bw.write(s.replaceAll("[a-z]","").trim() + " ");
            count++;
        }

        bw.flush();
        bw.close();
        br.close();
    }

    static String convert(int i, String[] numberlist) {
        StringBuilder sb = new StringBuilder();
        for(char d : String.valueOf(i).toCharArray()){
            sb.append(numberlist[d - '0']).append(" "); //0빼줘서 ASCII 코드 전환
        }
        return sb.toString();
    }
}

회고

처음에는 map을 사용해서 영단어와 숫자를 같이 저장할까도 했지만 정렬을 해야하기 때문에 treemap을 써야하는데 불필요한 과정일 것 같아서 다른 방법이 없을까 곰곰히 생각해보았다.
영어와 숫자는 서로 완전히 구분이 가능하기 때문에 둘이 합쳐서 String List로 저장한다음 정규식으로 영어를 제거하여 쉽게 숫자만 남길 수 있었다.
정렬은 Collections.sort를 사용하였다.

아 제출을 했을 때 출력형식이 계속 잘못되었다고 나왔는데

if (count % 10 == 0){
       bw.write("\n");
   }

이렇게 써줘서 0번째에도 공백라인을 출력했었다. count가 0이 아닐때라고 조건을 추가해주니 바로 정답처리 되었다.

저것때문에 얼마나 오래 고민했는지..

profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글