⏱소요 시간 - 45분
🔑해결 방법
이 방법으로 풀었더니 에러 파티가 열렸다...
이론상으로 다를 게 없어 보였는데 문자열을 뒤집는 것이랑 내림차순 정렬하는 것은 엄연히 다르다.
예를 들어, "aBcDeFg"는
문자열을 뒤집으면 "gFeDcBa"라는 결과가
내림차순 정렬하면 "gecaFDB"라는 결과가 나온다. (내림차순이므로 소문자 -> 대문자 순으로 전개)
즉, 시작부터 뒤집을 것이 아니라, 일단 정렬을 하고 뒤집으라는 것이다. 이건 다른 사람이 푼 코드에서 살펴보자.
내가 푼 방법은 아래와 같다.
1. String -> String[] 변환
String[] arr = s.split(""); --> 오늘 또 새로운 방법을 알아냈다ㅎㅎ
2. String[] 내림차순 정렬
오늘 정리한 Comparator를 구현해서 작성했다.
3. String[] -> String 변환
StringBuffer를 만들어서 String[]의 요소들을 하나씩 꺼내며 buffer에 append하는 형식으로 전개했다.
간단한 문제였지만 몰랐던 부분들을 많이 알게 되었다.
StringBuilder도 정말 자주 나와서 한번 정리해야겠다!
🔎소스 코드
package step1;
import java.util.Arrays;
import java.util.Comparator;
// 문자열 내림차순으로 배치하기
public class Ex15 {
public static void main(String[] args) {
System.out.println(solution("Zbcdefg"));
System.out.println(solution("aBcDeFg"));
}
public static String solution(String s) {
String answer = "";
// 1. String -> String[] 변환
String[] arr = s.split("");
// 2. String[] 내림차순 정렬 정의
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
// 3. String[] -> String 변환
StringBuffer sb = new StringBuffer();
for(int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
answer = sb.toString();
return answer;
}
}
🔎다른 사람의 코드 [ StringBuilder 사용 ]
내 코드는 뭔가 날것으로... 너무 풀어서 쓴 코드여서 간략한 코드들이 많아 가지고 왔다.
첫 번째 코드는 위에서 언급했던 StringBuilder를 사용한 코드이다.
1. String -> char[] 로 변경 : String의 toCharArray() 메서드 사용
char[] arr = s.toCharArray();
2. char[] -> String -> StringBuilder로 변경
StringBuilder sb = new StringBuilder(new String(arr));
3. StringBuilder 상태로 뒤집고 -> String 으로 변경
sb.reverse().toString();
package step1;
import java.util.Arrays;
// 문자열 내림차순으로 배치하기
public class Ex15_2 {
public static void main(String[] args) {
System.out.println(solution("Zbcdefg"));
System.out.println(solution("aBcDeFg"));
}
public static String solution(String s) {
String answer = "";
char[] arr = s.toCharArray();
Arrays.sort(arr); // 오름차순 정렬
// char[] -> String -> StringBuilder
StringBuilder sb = new StringBuilder(new String(arr));
// StringBuilder의 reverse()로 정렬 뒤집기 = 내림차순
// toString()으로 다시 String형으로 변환
answer = sb.reverse().toString();
return answer;
}
}
🔎다른 사람의 코드 [ Collections.reverseOrder() 사용 ]
1. String -> String[]로 변경 : split("")
2. Collections의 reverseOrder() 메서드 사용
Arrays.sort(arr, Collections.reverseOrder());
3. String 클래스의 join()을 사용하여 문자열 합치기
String.join("", arr); // arr 배열을 ""을 기준으로 문자열로 합쳐라
** join() 메서드에 대해 더 알아보자면,
각각의 String을 하나의 String으로 합쳐주거나 Array(배열)을 하나의 String으로 바꿔주는 메서드이다.
join()은 static 메서드이기 때문에 String.join() 처럼 클래스명으로 바로 부른 것을 확인할 수 있다.
String animals = "dog, car, bear";
String[] arr = animals.split(","); // , 을 기준으로 잘라서 arr[]에 넣어라
String str = String.join("-", arr); // 배열의 문자열을 '-'로 구분해서 결합해라
System.out.println(str);
package step1;
import java.util.Arrays;
import java.util.Collections;
// 문자열 내림차순으로 배치하기
public class Ex15_1 {
public static void main(String[] args) {
System.out.println(solution("Zbcdefg"));
System.out.println(solution("aBcDeFg"));
}
public static String solution(String s) {
String answer = "";
String[] arr = s.split("");
Arrays.sort(arr, Collections.reverseOrder());
answer = String.join("", arr);
return answer;
}
}
'ALGORITHM' 카테고리의 다른 글
[프로그래머스 Java] 서울에서 김서방 찾기 (0) | 2021.01.20 |
---|---|
[프로그래머스 Java] 문자열 다루기 기본 (0) | 2021.01.13 |
[프로그래머스 Java] 문자열 내 p와 y의 개수 (0) | 2021.01.12 |
char[] <-> String <-> String[] (0) | 2021.01.12 |
[프로그래머스 Java] 문자열 내 마음대로 정렬하기 (0) | 2021.01.12 |