PRACTICE/JAVA
[프로그래머스] 정수 내림차순으로 배치하기
j1ngerhead
2024. 10. 1. 23:30
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12933
import java.util.*;
class Solution {
public long solution(long n) {
// 1. 정수를 문자열로 변환
String str = Long.toString(n);
// 2. 문자열을 문자 배열로 변환
Character[] charArray = new Character[str.length()];
for (int i = 0; i < str.length(); i++) {
charArray[i] = str.charAt(i);
}
// 3. 문자 배열 정렬 (내림차순)
Arrays.sort(charArray, Collections.reverseOrder());
// 4. 정렬된 문자 배열을 다시 문자열로 변환
StringBuilder sortedStr = new StringBuilder();
for (char c : charArray) {
sortedStr.append(c);
}
// 5. 문자열을 정수로 변환하여 반환
return Long.parseLong(sortedStr.toString());
}
}
정수를 문자열로 변환한 후(각 자릿수 분리를 위해) 문자열을 문자 배열로 변환하고 이를 정렬해서
정렬된 문자 배열 → 다시 문자열로 변환 → 정수로 변환한다.
Character 대신 char 쓰면 에러났던 이유에 대해 gpt에게 물어보았다.
Character와 char는 자바에서 다루는 서로 다른 데이터 타입임 !
1. 기본형과 참조형
- char: 기본형(primitive type)입니다. 각 문자를 단순한 형태로 저장
- Character: 참조형(wrapper class)입니다. char를 객체로 감싸는 형태로, 추가적인 기능을 제공
2. 배열의 타입
- Character[] charArray: Character 타입의 배열
이 배열은 각 문자를 Character 객체로 저장할 수 있다.
자바에서 배열의 크기를 정적으로 지정할 때 객체 배열을 사용할 수 있다. - char[]: 기본형 char 타입의 배열, 각 문자를 단순히 저장한다.
문제의 원인
Arrays.sort() 메서드는 일반적으로 객체 배열에 대해 작업을 수행할 수 있지만,
char[]는 기본형 배열이기 때문에 직접적으로 Collections.reverseOrder()와 함께 사용할 수 없다. Collections.reverseOrder()는 객체를 정렬하기 위한 메서드이기 때문에 기본형 배열을 정렬할 수 없음 !
따라서, char[]를 사용하려고 할 경우에는 Arrays.sort() 메서드를 직접 사용할 수 있지만,
내림차순 정렬을 위해 char[]를 Character[]로 변환하고 Collections.reverseOrder()를 사용해야 한다.
char[]를 사용하고 내림차순 정렬을 구현한 풀이
import java.util.Arrays;
class Solution {
public long solution(long n) {
// 1. 정수를 문자열로 변환
String str = Long.toString(n);
// 2. 문자열을 char 배열로 변환
char[] charArray = str.toCharArray();
// 3. char 배열 정렬 (오름차순)
Arrays.sort(charArray);
// 4. 정렬된 배열을 뒤집기 (내림차순)
StringBuilder sortedStr = new StringBuilder(new String(charArray)).reverse();
// 5. 문자열을 정수로 변환하여 반환
return Long.parseLong(sortedStr.toString());
}
}
320x100