개발 공부/TIL(Today I Learned)

99클럽 코테 스터디 11일차 TIL 정수 내림차순으로 배치하기

애해 2024. 8. 2. 00:36
728x90

 

# 오늘의 학습 키워드 

정렬

 

# 오늘의 문제 

문제 설명

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

 

제한 조건

  • n 1이상 8000000000 이하인 자연수입니다.

 

# 나의 풀이방식 

입력받은 n을 split("")함수로 String[]을 만든 후 내림차순 정렬을 했다.

StringBuffer로 String[]을 String으로 변환한 값을 return 했다. 

import java.util.Arrays;
import java.util.*;

class Solution {
    public long solution(long n) {
        long answer = 0;
        String[] strArr = String.valueOf(n).split("");
        
        Arrays.sort(strArr,Collections.reverseOrder());
        
        StringBuffer sb = new StringBuffer();
        
        for(int i = 0; i < strArr.length; i++){
            sb.append(strArr[i]);
        }
        
        return Long.parseLong(sb.toString());
    }
}

 

# 다른사람 풀이

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());
  }
}

 

# 오늘의 공부 

 

1. StringBuffer와 StringBuilder 

- 공통점 : String과 다르게 문자열 연산 등으로 기존 객체의 공간이 부족하게 되면 기존 버퍼 크기를 늘리면서 유연하게 동작함 

- 차이점 : StringBuffer는 멀티스레드 환경에서도 동기화를 지원하지만 StringBuilder는 동기화를 보장하지 않음

결론은? String은 짧은 문자열 연산하는 경우, StringBuffer는 스레드에 안전한 프로그램이 필요할때 값 동기화 보장을 위해 사용하고, 

StringBuilder는 스레드가 안전한지 여부는 관계없을때 사용 (단일 스레드 환경이라면 동기화 처리를 하는 StringBuffer보다 StringBuilder가 성능이 낫다)

 

2. 정렬 함수 

Arrays.sort() : 배열 오름차순 정렬

Arrays.sort(String[], Collections.reverseOrder()) : 1번째 인자인 배열의 내림차순 정렬

 

 

# 오늘의 회고 

처음에는 string에서 int로 변환해서 sort()를 하려고 했는데 괜히 돌아갈뻔 했다. 

반응형