문제 요구사항
문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
제한 사항
- str은 길이 1 이상인 문자열입니다.
풀이
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
//문자열을 리스트로 변환
String[] strArr = s.split("");
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArr));
//리스트를 정렬
Collections.sort(list, Collections.reverseOrder());
//리스트를 다시 문자열로 변환
answer = String.join("", list);
//문자열을 반환
return answer;
}
}
모범답안
import java.util.Arrays;
public class ReverseStr {
public String reverseStr(String str){
char[] sol = str.toCharArray();
Arrays.sort(sol);
return new StringBuilder(new String(sol)).reverse().toString();
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
ReverseStr rs = new ReverseStr();
System.out.println( rs.reverseStr("Zbcdefg") );
}
}
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.util.Comparator;
public class ReverseStr {
public String reverseStr(String str){
return Stream.of(str.split(""))
.sorted(Comparator.reverseOrder())
.collect(Collectors.joining());
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
ReverseStr rs = new ReverseStr();
System.out.println( rs.reverseStr("Zbcdefg") );
}
}
import java.util.Arrays;
public class ReverseStr {
public String reverseStr(String str){
char[] ch = str.toCharArray();
Arrays.sort(ch);
StringBuffer st = new StringBuffer(String.valueOf(ch));
st.reverse();
return st.toString();
}
}
실패 요인
- Collections.sort()가 void 메서드인지 알지 못했다(반드시 특정 collection 구현체를 return한다고 생각했다.)
- 리스트를 문자열로 변환하는 함수의 사용법을 알지 못했다 -> String.join(구분자, 리스트)
잘한 점
- 풀이 흐름을 논리적으로 설계하였다(문자열 -> 리스트 -> 정렬 -> 문자열)
인사이트
new ArrayList<>()의 <> 안에는 굳이 자료형을 넣지 않아도 된다.
문자열을 리스트로 바로 바꿀 수는 없고, 배열을 한번 거쳐야 한다. Arrays.asList(배열)은 리스트를 반환한다.
리스트를 다시 문자열로 반환할 때는 String.join(delimiter, elements)을 사용한다. 이는 delimiter로 구분된 String을 반환한다. 구분자 없이 이어진 문자열로 붙이고 싶을 경우 delimiter에 공백("")을 대입하면 된다.
문자열 정렬에는 ArrayList<String>보다 char[]가 더 적합하다. 메모리/성능상 더 유리하기 때문.
String.join()은 구분자를 넣고 싶을 때만 사용하는 것이 좋다.
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/12917
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Algorithm' 카테고리의 다른 글
| [알고리즘] 문자열 다루기 기본 - 문자열의 길이와 구성 검증하기 (0) | 2026.02.02 |
|---|---|
| [알고리즘] 부족한 금액 계산하기 (0) | 2026.02.02 |
| [알고리즘] 약수의 개수와 덧셈 (0) | 2026.01.29 |
| [알고리즘] 내적 구하기 (0) | 2026.01.28 |
| [알고리즘] 수박수박수박수박수박수? 문제 풀이 (0) | 2026.01.28 |