자바 백준 1755번
실버 4
https://www.acmicpc.net/problem/1755
문제 보기
분류: 문자열, 정렬
연습 코드
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class NumberAndRead {
int number;
String read;
NumberAndRead(int number, String read) {
this.number = number;
this.read = read;
}
}
public class Main {
public static void main(String[] args) {
List<NumberAndRead> numbersList = new ArrayList<>();
numbersList.add(new NumberAndRead(1, "one"));
numbersList.add(new NumberAndRead(2, "two"));
numbersList.add(new NumberAndRead(3, "three"));
numbersList.add(new NumberAndRead(4, "four"));
numbersList.add(new NumberAndRead(5, "five"));
// 문자열을 기준으로 NumberAndRead 객체를 비교하는 Comparator를 사용하여 리스트 정렬
Collections.sort(numbersList, Comparator.comparing(o -> o.read));
/*
Comparator.comparing() 메서드:
- Comparator.comparing() 메서드는 Comparator 인터페이스를 구현하는데 사용되며,
비교 기준을 제공하는 정적 메서드.
- 여기서 o -> o.read는 람다 표현식으로, numbersList에 있는 NumberAndRead 객체들을 받아서
해당 객체의 read 필드 값을 기준으로 비교.
- 따라서, Comparator.comparing() 메서드를 사용하여 NumberAndRead 객체를 read 필드 값을 기준으로
사전순 정렬.
- 이 정렬은 Collections.sort() 메서드를 통해 numbersList 내의 객체들을 변경.
*/
// 정렬된 리스트 출력
for (NumberAndRead pair : numbersList) {
System.out.println(pair.number + " - " + pair.read);
}
}
}
/*
5 - five
4 - four
1 - one
3 - three
2 - two
*/
코드 보기
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
// 숫자와 그 숫자를 영어로 읽은 문자열을 저장하는 클래스
class NumberAndRead {
int number;
String read;
NumberAndRead(int number, String read) {
this.number = number;
this.read = read;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 입력 받기
int M = sc.nextInt(); // 범위의 시작 값
int N = sc.nextInt(); // 범위의 끝 값
// 숫자와 문자열 저장할 리스트
List<NumberAndRead> numbersList = new ArrayList<>();
// M부터 N까지의 숫자와 해당 숫자를 영어로 읽은 문자열을 리스트에 추가
for (int i = M; i <= N; i++) {
numbersList.add(new NumberAndRead(i, getRead(i)));
}
// 문자열을 기준으로 리스트를 사전순으로 정렬
Collections.sort(numbersList, Comparator.comparing(o -> o.read));
int count = 0;
for (NumberAndRead pair : numbersList) {
// 숫자 출력
System.out.print(pair.number + " ");
count++;
if (count % 10 == 0) {
// 10개씩 출력 후 줄 바꿈
System.out.println();
}
}
}
// 숫자를 영어로 변환하여 반환하는 메서드
private static String getRead(int number) {
// 입력된 정수를 문자열로 변환하여 numStr 변수에 저장
String numStr = Integer.toString(number);
// 결과를 저장할 StringBuilder 객체 생성
StringBuilder result = new StringBuilder();
// 각 자리수를 순회하며 영어 표현으로 변환하여 result에 추가
for (int i = 0; i < numStr.length(); i++) {
// 현재 자리수의 숫자를 가져옴
int digit = Character.getNumericValue(numStr.charAt(i));
// 숫자를 영어로 읽은 문자열을 numbers 배열에서 가져와 result에 추가
result.append(numbers[digit].read).append(" ");
}
// 결과 문자열의 양 끝에 있는 공백 제거 후 반환
return result.toString().trim();
}
// 숫자와 해당 숫자를 영어로 읽은 문자열을 미리 정의한 배열
private static final NumberAndRead[] numbers = {
new NumberAndRead(0, "zero"),
new NumberAndRead(1, "one"),
new NumberAndRead(2, "two"),
new NumberAndRead(3, "three"),
new NumberAndRead(4, "four"),
new NumberAndRead(5, "five"),
new NumberAndRead(6, "six"),
new NumberAndRead(7, "seven"),
new NumberAndRead(8, "eight"),
new NumberAndRead(9, "nine")
};
}
/*
8 28
8 9 18 15 14 19 11 17 16 13
12 10 28 25 24 21 27 26 23 22
20
*/
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 2789 - 유학 금 (0) | 2023.12.09 |
---|---|
[Java] 백준 풀기 13410 - 거꾸로 구구단 (0) | 2023.12.07 |
[Java] 백준 풀기 1356 - 유진수 (4) | 2023.12.05 |
[Java] 백준 풀기 5354 - J박스 (0) | 2023.12.04 |
[Java] 백준 풀기 6679 - 싱기한 네자리 숫자 (0) | 2023.12.03 |