[JAVA] 문자열 내림차순으로 배치하기

태로미·2023년 9월 21일
0

Programmers

목록 보기
22/29
post-thumbnail

❓문제


문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.



🚫제한


• str은 길이 1 이상인 문자열입니다.



💻입출력 예


sreturn
"Zbcdefg""gfedcbZ"













📝해결


1. StringBuilder

class Solution {
	public String solution(String s) {
		String answer = "";

		char[] arr = s.toCharArray();
		Arrays.sort(arr);
		
		StringBuilder sb = new StringBuilder(new String(arr));
		answer = sb.reverse().toString();
		return answer;
	}
}
  • 문자열을 char배열로 변환하여 Arrays.sort() 메서드로 오름차순 정렬.
  • StringBuilder 객체를 선언하면 생성자에 문자열 전달이 가능한데
    이 때, String 생성자에 char배열인 arr을 넣어줌으로써 문자열로 변환 후,
    StringBuilder 생성자에 문자열을 전달함.
    • String str = new String(charArr);
    • String 생성자는 char배열을 파라미터로 받아 문자열로 변환함.
  • StringBuilder의 reverse() 메서드를 사용하여 다시 역순으로 정렬.
  • 만들어진 문자열을 출력하기 위해 toString() 메서드 사용.
  • 하나의 작업만 처리하는 클래스라면 StringBuffer보단 StringBuilder가 더 빠름.

2. Stream

class Solution {
	public String solution(String s) {
		   
		  return Stream.of(s.split(""))
					   .sorted(Comparator.reverseOrder())
					   .collect(Collectors.joining());
	}
}
  • 문자열에 spilit(””) 메서드 사용, 문자열 배열로 만든 후 Stream 생성.
  • Stream의 sorted() 메서드에 파라미터를 추가하여 내림차순 정렬.
    • 오름차순 정렬은 파라미터를 제외하고 사용하면 됨.
  • collect 객체의 joining() 메서드로 문자열 배열을 하나의 문자열로 합침.
    • joining() 메서드의 return타입은 String.
  • 그러나 해당 문제에서는 Stream을 사용하는 것이 비효율적이며,
    StringBuilder를 사용하는 것이 실행속도가 빠름.






💭마무리

  • Level_1 / 11:46
  • Point
    – StringBuilder의 생성자 & reverse() 메서드
    – Stream의 정렬 & collect 기능

StringBuilder와 StringBuffer에 대해서도 따로 포스팅을 해야겠다!!!
개념은 잘 알고있지만 뭔가 활용은 잘 안되는ㅎㅎㅎㅎㅎ
또 스트림을 사용하다보면 어쩔때는 Stream.of()로 스트림을 생성하고,
또 어쩔때는 Arrays.stream()으로 스트림을 생성하는데,
이 둘의 차이에 대해서도 정리를 쫌 해봐야겠다ㅠㅋㅋㅋㅋㅋ
약간의 차이가 자꾸만 날 궁금하게 해,,🤓


profile
Here And Now

0개의 댓글