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()를 하려고 했는데 괜히 돌아갈뻔 했다.
반응형
'개발 공부 > TIL(Today I Learned)' 카테고리의 다른 글
99클럽 코테 스터디 13일차 TIL Search in a Binary Search Tree (0) | 2024.08.04 |
---|---|
99클럽 코테 스터디 12일차 TIL 문자열 내림차순으로 배치하기 (0) | 2024.08.03 |
99클럽 코테 스터디 10일차 TIL Kth Largest Element in a Stream (0) | 2024.07.31 |
99클럽 코테 스터디 8일차 TIL 올바른 괄호 (0) | 2024.07.29 |
99클럽 코테 스터디 7일차 TIL 같은 숫자는 싫어 (0) | 2024.07.29 |