새벽코딩

[백준] [1755] 숫자놀이 (문자열, 구현) (JAVA) 본문

알고리즘

[백준] [1755] 숫자놀이 (문자열, 구현) (JAVA)

J 코딩 2023. 3. 13. 14:08
반응형

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

 

1755번: 숫자놀이

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

www.acmicpc.net


문제

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

문제는 정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력하는 것이다.

입력

첫째 줄에 M과 N이 주어진다.

출력

M 이상 N 이하의 정수를 문제 조건에 맞게 정렬하여 한 줄에 10개씩 출력한다.

예제 입력 1 복사

8 28

예제 출력 1 복사

8 9 18 15 14 19 11 17 16 13
12 10 28 25 24 21 27 26 23 22
20

※ JAVA 코드 (숫자놀이)

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));
		StringTokenizer st;
		
		Map<Character, String> list = new HashMap<>();
		Map<String, Integer> map = new HashMap<>();
		
		// 0 ~ 9 맵에 담는다
		list.put('0', "zero");
		list.put('1', "one");
		list.put('2', "two");
		list.put('3', "three");
		list.put('4', "four");
		list.put('5', "five");
		list.put('6', "six");
		list.put('7', "seven");
		list.put('8', "eight");
		list.put('9', "nine");
		
		st = new StringTokenizer(br.readLine());
		
		// input
		int M = Integer.parseInt(st.nextToken());
		int N = Integer.parseInt(st.nextToken());
		
		for(int i = M; i <= N; i++) {
			// 각 숫자값
			String val = String.valueOf(i);
			String in = "";
			for(int j = 0; j < val.length(); j++) {
				// 숫자의 각 문자 뽑아서 새로운 문자에 담는다
				int num = (int) val.charAt(j) - '0';
				char c = (char) (num + '0');
				// 문자를 합친다
				in += list.get(c);
			}
			// key : 숫자문자열, value : 숫자
			map.put(in, i);
		}
		
		// map에 저장된 key묶음
		List<String> keySet = new ArrayList<>(map.keySet());
		// 키 값 기준으로 정렬
		Collections.sort(keySet);
		int idx = 1;
		for(String key : keySet) {
			System.out.print(map.get(key));
			if(idx % 10 == 0) {
				System.out.println();
			} else {
				System.out.print(" ");
			}
			idx++;
		}
	}
}

※ 생각정리 (숫자놀이)

백준 숫자놀이 문제를 풀면서 다양한 자바 문법을 공부할 수 있었다.

1. 0~9까지의 숫자를 HashMap<Character, String> 에 미리 담아두었다.

2. 숫자가 입력되면 숫자의 길이만큼 각 숫자를 HashMap에 넣어 영어 알파벳을 찾고 해당 문자열을 새로운 HashMap의 key로 담고 숫자를 value로 담는다.

3. ArrayList에 해당 key값들을 담고 정렬을 해준다.

4. 정렬된 키값을 바탕으로 Map에서 숫자값(value)를 찾는다.

 

-새벽코딩-

반응형
Comments