728x90
문제
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개씩 출력한다.
풀이
코드 참고
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
// 입력 설정
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
// 숫자를 문자열로 변환하기 위한 배열 생성
String [] num = new String [] {"zero", "one","two","three","four","five","six","seven","eight","nine"};
// 값 입력
int m = Integer.parseInt(st.nextToken()), n = Integer.parseInt(st.nextToken()), cnt=0;
// str : M~N까지 숫자가 영어로 바귀어 저장되는 공간, out : 영어가 숫자로 바뀌어 저장되는 공간
String [] str = new String [n-m+1];
int [] out = new int [n-m+1];
// hm : 문자와 숫자를 Map으로 만들어 값을 들고오기 위함
HashMap<String, Integer> hm = new HashMap<>();
// 문자에 대한 숫자의 값을 매칭시킴
for(int i=0;i<10;i++)
hm.put(num[i], i);
// M~N까지 반복하면서 사전순 정렬를 하기위한 밑 작업
for(int i=m;i<=n;i++) {
// 숫자가 10보다 클떄와 10 보다 작을떄로 나누어서 1자리, 2자리 숫자를 처리
if(i<10)
str[cnt++]=num[i];
else
str[cnt++]=num[i/10]+" "+num[i%10];
}
Arrays.sort(str);
// 나눠진 숫자를 이용 StringTokenizer를 이용하여 하나의 숫자씩 확인
for(int i=0;i<cnt;i++) {
st = new StringTokenizer(str[i]);
// 1의 자리를 먼저 숫자로 반환
out[i]=hm.get(st.nextToken());
// 안에 토큰이 남아 있다면 2자리 값이기에 먼저 반환된 값에서 10을 곱해서 10의 자리고 만들고 1의자리로 추가
if(st.hasMoreTokens())
out[i]=out[i]*10+hm.get(st.nextToken());
}
// 출력
for(int i=0;i<cnt;i++) {
bw.write(out[i]+" ");
// 한줄에 10개씩 출력하기 위함
if(i%10==9)
bw.write("\n");
}
bw.close();
}
}
728x90
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
Baekjoon 14659 한조서열정리하고옴ㅋㅋ JAVA (0) | 2022.04.30 |
---|---|
Baekjoon 2629 양팔저울 JAVA (0) | 2022.04.30 |
Baekjoon 9996 한국이 그리울 땐 서버에 접속하지 JAVA (0) | 2022.04.30 |
Baekjoon 13699 점화식 JAVA (0) | 2022.04.30 |
Baekjoon 10942 팰린드롬? DP JAVA (0) | 2022.04.30 |
댓글