알고리즘
[알고리즘 / 백준] 1427 - 소트인사이드
DevBee
2020. 11. 9. 10:19
문제는 위와 같으며 기본적으로 제공되는 sort() 를 역순으로 정렬하도록 사용하여 문제를 해결하였습니다.
파이썬 코드는 다음과 같습니다.
from sys import stdin
nums = list(map(int, stdin.readline().strip()))
nums.sort(reverse=True)
print("".join(str(i) for i in nums))
자바 코드는 다음과 같습니다. 자바의 경우 reverse 배열을 만들 때 형변환 등 다소 복잡한 로직이 있어 우선 sort 하고 반대로 출력하는 방식을 사용하였습니다.
import java.io.*;
import java.util.Arrays;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] inputs = br.readLine().split("");
int[] nums = new int[inputs.length];
for (int i = 0; i < inputs.length; i++) {
nums[i] = Integer.parseInt(inputs[i]);
}
Arrays.sort(nums);
for (int i = (nums.length - 1); i >= 0; i--) {
System.out.print(nums[i]);
}
}
}
또 다른 해결 방법으로는 0~9 까지 수를 거꾸로 돌면서 주어진 숫자에 포함이 되어있는지 확인하여 출력하는 방식이 있습니다.
파이썬 코드는 다음과 같습니다.
from sys import stdin
nums = list(map(int, stdin.readline().strip()))
for i in range(9, -1, -1):
for n in nums:
if n == i:
print(i, end="")
자바 코드는 다음과 같습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class BJAlgo_1427 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] nums = Arrays.stream(br.readLine().split("")).mapToInt(Integer::parseInt).toArray();
for (int i = 9; i >= 0; i--) {
for (int n : nums) {
if (i == n) {
System.out.print(i);
}
}
}
}
}
이 문제의 경우 숫자보다 자리수에 초점을 맞춰 생각하고 문제에 접근하는 것이 더 쉬운 것 같습니다.