문자열 내림차순 배열하기
문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
제한 사항
- str은 길이 1 이상인 문자열입니다.
입출력 예
s | return |
---|---|
Zbcdefg | gfedcbZ |
문제풀이 IDEA
JAVA에 sort기능이 있으므로 sort메서드를 가져다가 쓰는데(sorting은 후에 따로 정리를 해야겠다)
이때 정렬되는 값들을 역으로 가져오면 되는데 collection 등의 class를 이용해 굳이 reverse를 가져오게 되면 비효율적일 것 같다
따라서 우리가 작성하고자하는 method의 return 값도 string이라서 string의 "+" operator를 이용하여 역순으로 string을 차곡차곡 쌓아나가주자 <- 뒤에 나오지만 좋지 못한 방법
나의코드 ⭐
1 2 3 4 5 6 7 8 9 10 11 12 13 | import java.util.Arrays; class Solution { public String solution(String s) { String[] arr = s.split(""); //string을 ""로 split하여 string Array로 저장(Arrays class의 sort method를 쓰기위해서) String answer = ""; Arrays.sort(arr); //인자로 받은 string을 list로 변환한 값을 오름차순으로 정렬한다 for(int i = arr.length - 1; i >= 0 ; i--){ //for문을 이용해 arr의 마지막인덱스 부터 처음 인덱스까지 역으로 탐색해준다 answer += arr[i]; //탐색 한 값을 문자열 answer에 차곡차곡 더해준다 } return answer; } } |
다른코드 ⭐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다. // 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다. import java.util.Arrays; public class ReverseStr { public String reverseStr(String str){ char[] sol = str.toCharArray(); //문자열을 char array로 바꾸어 저장해준다. Arrays.sort(sol); //char array를 오름차순으로 sorting해준다 return new StringBuilder(new String(sol)).reverse().toString(); //StringBuilder생성자에 String을 넣고 reverse메서드를 이용하여 뒤집어 주고 } toString method를 이용하여 String으로 리턴해준다 } |
주의해야할 사항
String vs Stringbuilder vs StringBuffer
위의 블로그를 보면 String과 StringBuilder 그리고 StringBuffer의 차이점을 설명하고 있는데
위에서 내가 한것처럼
String의 값에 계속 값을 더하게 되면 String은 계속 새로 생성되어 메모리 관리 측면에서 치명적일수 있다.
따라서 StringBuilder 나 StringBuffer를 사용하는 것이 훨씬 좋은 방법이겠다.
출처: https://programmers.co.kr
댓글 없음:
댓글 쓰기