anott
기록
anott
  • 분류 전체보기
    • 오라클
    • SQL
    • 알고리즘
      • 백준저지
      • 프로그래머스
      • SWEA
    • 개발 관련
    • 프론트엔드
      • TypeScript, Next.js
      • React 공식문서 읽기
hELLO · Designed By 정상우.
anott

기록

백준저지 1755번 숫자놀이
알고리즘/백준저지

백준저지 1755번 숫자놀이

2021. 9. 27. 23:57

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

 

1755번: 숫자놀이

79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로

www.acmicpc.net

 

 

생각

한자리 수인 경우는 띄어쓰기 없이 하나의 단어만 출력하는 것을 몰라서 틀렸다.

Comparator 사용하는 것이 아직 안 익숙해서 무식하게 정렬하고 해시에서 찾는 방법으로 구현했다. 입력이 99까지라서 시간 초과는 나지 않았다.

 

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;

public class BOJ1755 {
    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 st = new StringTokenizer(br.readLine());
        String[] words = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
        int M = Integer.parseInt(st.nextToken());
        int N = Integer.parseInt(st.nextToken());

        String[] toFindNum = new String[N - M + 1]; // 숫자를 영어로 바꾼 문자열을 저장할 것. M부터 N까지라서 배열 개수는 N-M+1
        HashMap<String, Integer> numStrHM = new HashMap<>(); // 문자열(예:"eight zero"), 숫자(예:80)를 쌍으로 해시맵에 저장
        for (int i = 0, n = M; i < toFindNum.length; n++, i++) { // i는 숫자 개수를 세기 위한 인덱스, n은 실제 해당 숫자를 표현할 인덱스
            int first = n / 10; // 99이하의 수이기 때문에 십의 자리
            int last = n % 10; // 일의 자리
            String numStr = (first == 0) ? words[last] : (words[first] + " " + words[last]);
            toFindNum[i] = numStr; // 영어 문자열 리스트에 넣기
            numStrHM.put(numStr, n); // (영어 문자열, 숫자) 쌍을 해시맵에 넣기
        }

        Arrays.sort(toFindNum); // 정렬

        for (int i = 0, j = 1; i < toFindNum.length; i++, j++) {
            bw.write(numStrHM.get(toFindNum[i]) + " "); // 해당 문자열에 맞는 숫자를 출력
            if (j % 10 == 0) { // 10자리마다 줄을 바꾸기
                bw.write("\n");
            }
        }
        bw.write("\n");
        bw.flush();
        bw.close();
    }
}
저작자표시 비영리 (새창열림)

'알고리즘 > 백준저지' 카테고리의 다른 글

백준저지 14442번 벽 부수고 이동하기 2 (Java)  (0) 2021.10.05
백준저지 2206번 벽 부수고 이동하기 (Java)  (0) 2021.10.04
백준저지 14502번 연구소  (0) 2021.09.26
백준저지 2667번 단지번호붙이기  (0) 2021.09.20
백준저지 1463번 1로 만들기  (0) 2021.09.15
    '알고리즘/백준저지' 카테고리의 다른 글
    • 백준저지 14442번 벽 부수고 이동하기 2 (Java)
    • 백준저지 2206번 벽 부수고 이동하기 (Java)
    • 백준저지 14502번 연구소
    • 백준저지 2667번 단지번호붙이기
    anott
    anott

    티스토리툴바