https://www.acmicpc.net/problem/5648
문제
모든 원소가 양의 정수인 집합이 있을 때, 원소를 거꾸로 뒤집고 그 원소를 오름차순으로 정렬하는 프로그램을 작성하세요.
단, 원소를 뒤집었을 때 0이 앞에 선행되는 경우는 0을 생략해야합니다.
입력
첫 번째로 입력되는 건 n (1 ≤ n ≤ 106)으로 사용자가 뒤이어 입력할 원소값을 결정합니다. 입력하는 줄에는 하나의 원소값 뿐만 아니라 여러 원소값도 들어갈 수 있습니다.
단, 입력하는 정수는 1012을 넘어선 안 됩니다.
출력
출력문은 위 문제 내용에 나와있는 정렬방법으로 정렬하여 아래 예제 출력을 참고하여 출력하세요.
풀이
풀이는 어렵지 않다. 뒤집는 건 StringBuilder에 담아 내장함수 reverse()를 쓰는게 제일 편해보인다. 범위가 범위다보니, long으로 써주는 것도 잊지 말자.
팁
사실 풀이가 어려워서 적었다기보다는, EOF 처리 방법을 정리하고자 적었다. 이 파일을 제출할 경우, BufferedReader.readLine()은 마지막 줄을 이후에 null을 return한다. 다만 이클립스에서 엔터로 넘길 경우, 끝나지 않고 엔터값을 계속 출력한다. 이를 끝내기 위해, 윈도우는 마지막 입력까지 적고, 엔터치고 ctrl+Z를 누르면 된다.
자세한 논의는 https://www.acmicpc.net/board/view/39199 참고.
(22.04.20 추가: ctrl+z 키가 이클립스 기준 되게 안 먹는다..한 10번 중 한 번꼴로 되는 수준이다. 왜지?)
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
List<Long> list = new ArrayList<>();
while(st.hasMoreTokens()) {
list.add(reverse(st.nextToken()));
}
String str = "";
while((str = br.readLine()) != null) {
st = new StringTokenizer(str);
while(st.hasMoreTokens()) {
list.add(reverse(st.nextToken()));
}
}
Collections.sort(list);
for (int i = 0; i < N; i++) {
sb.append(list.get(i)+"\n");
}
System.out.println(sb.toString());
}
static long reverse(String num) {
StringBuilder sb = new StringBuilder();
sb.append(num);
return Long.parseLong(sb.reverse().toString());
}
}
'PS > Sorting' 카테고리의 다른 글
백준 16455번: K번째 수 찾는 함수 (Java) (0) | 2022.08.16 |
---|---|
정렬 개념 정리 (with JAVA) (0) | 2022.02.18 |
백준 18870번: 좌표 압축 (Python) (0) | 2021.10.21 |
백준 10814번: 나이순 정렬 (Python) (0) | 2021.10.20 |
10989번: 수 정렬하기 (0) | 2021.10.20 |