해당 글은 항해99 클럽 코딩테스트 스터디에서 진행된 31일차(20241127) 비기너 문제에 대한
TIL(Today I Learned) 내용입니다.
문제 출처) https://www.acmicpc.net/problem/1755
이 문제에서 주목해야할 부분은 다음과 같다.
1. 주요조건
(1) M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준
(2) 사전순으로 정렬하여
(3) 출력
2. 입력
첫째 줄에 M과 N이 주어진다.
정수 M, N(1 ≤ M ≤ N ≤ 99)
3. 출력
정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력
한 줄에 10개씩 출력
풀이방향
(1) 입력, 출력을 위한 클래스 준비 및 실제 입력 받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
자바에는 사전(dictionary)클래스가 없으므로 HashMap을 활용해 만들어준다.
0~9까지의 정수에 대해서 각각에 문자열 "zero", "one" ... 대응시켜 HashMap을 생성한다.
String[] num = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
HashMap<String, Integer> hm= new HashMap<>();
for (int i = 0; i < 10; i++) {
hm.put(num[i], i);
}
(3) 핵심 풀이 과정
for (int i = m; i <= n; i++) {
if (i < 10) {
str[count++] = num[i];
} else {
str[count++] = num[i/10] + " " + num[i%10];
}
}
Arrays.sort(str);
for (int i = 0; i < count; i++) {
st = new StringTokenizer(str[i]);
out[i] = hm.get(st.nextToken());
if (st.hasMoreTokens()) {
out[i] = out[i] * 10 + hm.get(st.nextToken());
}
}
(4) 조건에 맞게 출력
for (int i = 0; i < count; i++) {
bw.write(out[i] + " ");
if (i % 10 == 9) {
bw.write("\n");
}
}
bw.close();