https://school.programmers.co.kr/learn/courses/30/lessons/12933
나의 접근 방식 :
class Solution {
public static ArrayList<Integer> solution(long n) {
long answer = 0;
String strNumber = Long.toString(n);
// strNumber 를 하나씩 때어놓고 크기를 비교하며 재배치해야함
// strNumber 를 하나씩 때어서 intArrayList 에 넣음
ArrayList<Integer> intArrayList = new ArrayList<>();
for (int i = 0; i < strNumber.length(); i++) {
intArrayList.add((strNumber.charAt(i) - '0'));
}
Integer[] intList = new Integer[intArrayList.size()];
// intArrayList 에 들어있는 숫자들 크기 비교해서 내림차순 배치
for (int i = 0; i < intArrayList.size(); i++) {
for (int j=1; j<intArrayList.size(); j++) {
if (intArrayList.get(i) < intArrayList.get(j)) {
intArrayList.add(i, intArrayList.get(j));
intArrayList.remove(j+1);
}
}
}
return intArrayList;
}
}
여기서 n 이 1234 일 때
[4, 3, 3, 1] 을 반환합니다. [4, 3, 2, 1] 이 아니라 !!!
ConcurrentModificationException 발생
이는 반복문이 진행되면서 Collection 이 변경되면 문제가 될 수 있기 때문입니다. Collection 의 사이즈 변경이 유발하는 오류입니다. next, set, add, remove 등도 문제를 발생시킬 수 있습니다.
참고 :
https://taeying.tistory.com/entry/JAVA-ConcurrentModificationException
이후 작성 답안 :
더보기
public class Main {
public static void main(String[] args) {
String a = "123";
String b = "321";
System.out.println(a+b);
}
}
class Solution {
public long solution(long n) {
long answer = 0;
// 입력값을 String 형으로 저장.
String strNumber = Long.toString(n);
// String 의 인덱스 순서대로 ArrayList 에 추가.
ArrayList<Integer> integerArrayList = new ArrayList<>();
for (int i=0; i<strNumber.length(); i++) {
integerArrayList.add(strNumber.charAt(i) - '0');
}
// Collections.reverse() : 역순 정렬.
// Collections.sort() : 순서대로 정렬.
// 하지만 여기서의 순서는 index의 순서 !!! 크기 별로 나누는 것이 아님 !!
Collections.reverse(integerArrayList);
// String 타입은 불변 객체이기 때문에, StringBuilder 타입으로 가변 객체를 생성하고
// 이를 통해 문자열을 쉽게 추가, 삭제, 수정할 수 있다.
StringBuilder sb = new StringBuilder();
for (int i : integerArrayList) {
sb.append(i); // 추가
}
// StringBuilder 타입을 String 타입으로
String stringByStringBuilder = sb.toString();
// String 타입을 롱타입으로
answer = Long.parseLong(stringByStringBuilder);
return answer;
}
}
아오 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
더보기
class Solution {
public static long solution(long n) {
long answer = 0;
// 입력값을 String 형으로 저장.
String strNumber = Long.toString(n);
Integer[] ints = new Integer[strNumber.length()];
for (int i=0; i<ints.length; i++) {
ints[i] = strNumber.charAt(i) - '0';
}
// Arrays.sort(ints); : 오름차순 정렬 기본 타입 배열 int[] 사용 가능
// 역순 정렬 시 참조 타입 배열 Integer[] 를 사용해여 Comparator 를 적용해야 한다.
Arrays.sort(ints, Collections.reverseOrder());
StringBuilder sb2 = new StringBuilder();
for (int i: ints) {
sb2.append(i);
}
String stringByStringBuilder2 = sb2.toString();
answer = Long.parseLong(stringByStringBuilder2);
return answer;
}
}
'문제 풀이 > 프로그래머스 알고리즘' 카테고리의 다른 글
핸드폰 번호 가리기 (0) | 2024.09.30 |
---|---|
나누어 떨어지는 숫자 배열 (1) | 2024.09.28 |
정수 제곱근 판별 (0) | 2024.09.26 |
프로그래머스) 햐샤드 수 - 재귀 함수, 재귀 메서드 (0) | 2024.09.25 |
프로그래머스) x만큼 간격이 있는 n개의 숫자 // 배열에 값 추가하기 + 주의 사항 (0) | 2024.09.24 |