1. 문제
2. 문제 해결 로직
1. 문제 이해
- 주어진 것
- String s // 임의의 정렬할 문자열
- 필요한 것
- 문자열 응답 //내림차순 정렬된 문자열
2. 데이터 구조 결정
- StringBuilder 사용
- 문자열을 동적으로 생성하고 변경할 때 유용한 클래스
- StringBuilder의 주요 메소드
- append() : 문자열 뒤에 추가
- insert() : 지정된 위치에 삽입
- delete() : 지정된 시작 인덱스와 종료 인덱스 사이의 문자열 삭제
- replace() : 지정된 시작 인덱스와 종료 인덱스 사이의 문자열을 다른 값으로 바꿉니다.
- reverse() : 문자열을 반대로 반전
- toString() : StringBuilder 객체를 String 객체로 변환하여 반환
- 방법 1. 정렬 방법 사용
- Arrays.sort (정렬 대상, Comparator (정렬 기준))
- Collections.sort (정렬 대상, Comparator (정렬 기준))
- Comparator가 부의 값을 돌려준다 -> 오름차순
- Comparator가 양의 반환 -> 내림차순으로 정렬
- 방법 2. Stream API 사용
- 함수형 프로그래밍 스타일로 데이터 처리
3. 알고리즘 설계
3-1. Character 배열 -> Arrays.sort -> StringBuilder
3-2. 목록 -> Collections.sort -> StringBuilder
3-3. Stream API
3. 코드 구현
3-1. Character 배열 -> Arrays.sort -> StringBuilder
import java.util.*;
class Solution {
public String solution(String s) {
//Charater배열 생성
Character() characters = new Character(s.length());
//String -> Character배열 변환
for (int i = 0; i < s.length(); i++) {
characters(i) = s.charAt(i);
}
//Arrays.sort메소드로 배열 내림차순 정렬
Arrays.sort(characters, Comparator.reverseOrder());
//StringBuilder 생성
StringBuilder sb = new StringBuilder();
//Character배열 -> StringBuilder 변환
for (Character character : characters) {
sb.append(character);
}
//StringBuilder -> String 변환 및 반환
return sb.toString();
}
}
3-2. 목록 -> Collections.sort -> StringBuilder
import java.util.*;
class Solution {
public String solution(String s) {
//List 생성
List<Character> characters = new ArrayList<>();
//String -> List 변환
for (int i = 0; i < s.length(); i++) {
characters.add(s.charAt(i));
}
//Collections.sort로 List 내림차순 정렬
//람다식 대신 Comparator.reversOrder()도 가능
Collections.sort(characters, (a, b) -> b.compareTo(a));
//StringBuilder 생성
StringBuilder sb = new StringBuilder();
//List -> StringBuilder 변환
for (Character character : characters) {
sb.append(character);
}
//StringBuilder -> String 변환 및 반환
return sb.toString();
}
}
3-3. Stream API
import java.util.Comparator;
import java.util.stream.*;
class Solution {
public String solution(String s) {
//String -> IntStream 변환
return s.chars()
//각 문자를 Character 객체로 변환
.mapToObj(c -> (char) c)
//sorted,Comparator로 내림차순 정렬
.sorted(Comparator.reverseOrder())
//각 Character 객체를 문자열로 변환
.map(String::valueOf)
//정렬된 문자열을 하나의 문자열로 결합
.collect(Collectors.joining());
}
}
*Reference
https://school.programmers.co.kr/learn/courses/30/lessons/12917