1. 문제
2. 문제 해결 논리
- 문제 이해
- 주어진 것
- String s //임의의 정렬할 문자열
- 요구되는 것
- String answer //내림차순 정렬된 문자열
- 주어진 것
- 데이터 구조 결정
- StringBuilder 사용
- 문자열을 동적으로 생성 및 수정할 때 유용한 클래스
- StringBuilder의 주요 메소드
- append() : 문자열 뒤에 추가
- insert() : 지정된 위치에 삽입
- delete() : 지정된 시작과 끝 인덱스 사이의 문자열 삭제
- replace() : 지정된 시작과 끝 인덱스 사이의 문자열을 다른 값으로 대체
- reverse() : 문자열을 거꾸로 뒤집기
- toString() : StringBuilder 객체를 String 객체로 변환하여 반환
- 방법 1. 정렬 메소드 사용
- Arrays.sort(정렬 대상, Comparator[정렬기준])
- Collections.sort(정렬 대상, Comparator[정렬기준])
- Comparator가 음수 반환 -> 오름차순 정렬
- Comparator가 양수 반환 -> 내림차순 정렬
- 방법 2. Stream API 사용
- 함수형 프로그래밍 스타일로 데이터 처리
- StringBuilder 사용
- 알고리즘 설계
3-1. Character배열 -> Arrays.sort -> StringBuilder
3-2. List -> 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. List -> 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()
//각 문자(int형)를 Character 객체로 변환 및 Stream으로 반환
.mapToObj(c -> (char) c)
//sorted,Comparator로 내림차순 정렬 및 Stream으로 반환
.sorted(Comparator.reverseOrder())
//각 Character 객체를 문자열로 변환 및 Stream으로 반환
.map(String::valueOf)
//정렬된 문자열을 하나의 문자열로 결합
.collect(Collectors.joining());
}
}
* Reference
https://school.programmers.co.kr/learn/courses/30/lessons/12917
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
'PS > Programmers' 카테고리의 다른 글
[level1, Stack/Queue] 같은 숫자는 싫어 (0) | 2023.03.20 |
---|---|
[level1, 유클리드 호제법] 최대공약수와 최소공배수 (0) | 2023.03.19 |
[level1, array] 행렬의 덧셈 (0) | 2023.03.19 |
[level1, StringBuilder] 수박수박수박수? (0) | 2023.03.18 |
[level1, Map] 신고 결과 받기 (0) | 2023.03.16 |