일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스택
- Java
- 빅데이터
- Queue
- LIS
- BFS
- HashMap
- dfs
- 백트래킹
- 탐색
- SQL
- 알고리즘
- Python
- 시뮬레이션
- 배열
- 완전탐색
- 다이나믹프로그래밍
- 구현
- 프로그래머스
- BufferedReader
- 다리 만들기
- oracle
- 아스키코드
- Stack
- 문자열
- 새벽코딩
- 백준
- 브루트포스
- 그리디
- DP
- Today
- Total
새벽코딩
[백준] [1755] 숫자놀이 (문자열, 구현) (JAVA) 본문
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)를 찾는다.
-새벽코딩-
'알고리즘' 카테고리의 다른 글
[SWEA] [15758] 무한 문자열 (2) | 2023.03.14 |
---|---|
[백준] [12891] DNA 비밀번호 (문자열, 슬라이딩윈도우) (JAVA) (0) | 2023.03.13 |
[백준] [1976] 여행가자 (Union-Find) (JAVA) (0) | 2023.03.12 |
[백준] [7569] 토마토 (BFS) (JAVA) (0) | 2023.03.09 |
[프로그래머스] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (ORACLE) (0) | 2023.03.09 |