[프로그래머스] 정수 내림차순으로 배치하기

최지나·2023년 10월 7일
0

코딩테스트

목록 보기
22/154

문제

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

nreturn
118372873211

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/12933

생각

  • long 타입 n을 문자로 변경한 뒤, 한 글자마다 split 한 뒤 정렬하자
  • 정렬(오름차순)으로 정렬된 문자들을 뒤에서부터 for문을 돌려 가져온 뒤 다시 long 타입으로 변환

코드

import java.util.*;

class Solution {
    public long solution(long n) {
        
        String result = "";
        String[] charList = String.valueOf(n).split("");
        
        Arrays.sort(charList);

        for (int i = charList.length - 1; i >= 0; i--){
            result += charList[i];
        }
        return Long.valueOf(result);
    }
}

다른 사람의 풀이

import java.util.*;

class Solution {
  public long solution(long n) {
        String[] list = String.valueOf(n).split("");
        Arrays.sort(list);

        StringBuilder sb = new StringBuilder();
        for (String aList : list) sb.append(aList);

        return Long.parseLong(sb.reverse().toString());
  }
}
  • StringBuilder를 사용하여 reverse() 메소드로 문자를 쉽게 뒤집은 풀이었다.
  • 메모리와 성능 부하가 적기에, 알고리즘 문제 풀 때도 StringBuilder를 사용해봐야 겠다 😚
String classStringBuilder
문자열 수정할 때마다 새로운 문자열을 생성내부적으로 문자열을 가변적으로 처리하여 문자열 수정 시 메모리 할당 및 복사 작업 최소화
  • StringBuilder 사용 테스트
    @Test
    public void stringBuilderTest() {

        StringBuilder sb = new StringBuilder();

        // 문자열 추가
        sb.append("Hello");

        // 문자열 삽입
        sb.insert(5, " World");

        // 문자열 수정
        sb.replace(0, 5, "Hi");

        // 문자열 삭제
        sb.delete(2, 4);

        assertEquals("Hiorld", sb.toString());

    }
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글