99클럽 코테 스터디 12일차 TIL

Marin·2024년 8월 2일
0

TIL

목록 보기
11/17
post-thumbnail
post-custom-banner

1 | 오늘의 문제

1. 문자열 내림차순으로 배치하기

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

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

제한 사항
str은 길이 1 이상인 문자열입니다.

입출력 예
s = "Zbcdefg", return : "gfedcbZ"

2. 풀이

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public String solution(String s) {
        String[] chars = s.split("");  //(1)
        Arrays.sort(chars, Collections.reverseOrder()); //(2)
        
        String answer = String.join("", chars);//(3)
        return answer;
    }
}
  1. String s를 String 배열로 초기화

    • charAt()을 통해 char 배열을 자주 사용한 것 같은데, Collection을 이용한 내림차순 정렬이 안되어 String 배열(객체)로 선언하였다.
  2. 내림차순 정렬

    • 대문자는 소문자보다 작다
    • 아스키코드: A = 65, a = 97
  3. String으로 초기화

    • String.join("연결문자", 배열이름)

    • 처음에 toString()만 썼다가 참조값이 나와서 당황했다.

    • Arrays.toString(chars)도 사용할 수 없는 게 출력이 대괄호를 거쳐서 나오기 때문에 답이 될 수 없다. 대신 장점으로는 다른 타입의 배열도 가능하다는 것.

return Arrays.toString();

>>>"[g, f, e, d, c, b, Z]"

String 배열을 String으로 합치기는 해당 블로그를 참고했다.

3. 다른 풀이 방법

  1. Stream
    아직 Stream 공부를 안해서 일단 써놓고 추가 공부 예정
String str = Arrays.stream(arrayName).collect(Collectors.joining(", ", "<", ">"));
  1. StringBuilder
    사실 처음에 StringBuilder를 사용하고 싶었는데 for-each문으로 반복하기가 번거로워서 위의 방법으로 풀었다. 그렇지만 한 번 해보자.
  • 일단 오름차순 정렬-> 역순 혹은 내림차순 정렬을 해야한다. 그러나 StringBuilder에는 정렬과 내림차순 정렬이 없다.

  • StringBuilder를 어떤 용도로 사용할 것인가?

    1. Character 배열로 선언, Collection으로 내림차순 정렬 후, StringBuilder로 형변환
    2. Char 배열로 정렬 후, StringBuilder로 역순 정렬, 문자열로 형변환
  • 사실 join이 더 간편하다.

4. 연습

1. Character[] - Collections - StringBuilder

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public String solution(String s) {
    	//1. Character 배열, for문으로 s 대입
        Character[] chars = new Character[s.length()];
        for (int i = 0; i < s.length(); i++) {
            chars[i] = s.charAt(i);
        }
        
        //2. Collection으로 내림차순 정렬
        Arrays.sort(chars, Collections.reverseOrder());
        
        //3. StringBuilder로 String형 만들기
        StringBuilder strb = new StringBuilder();
        for(char i : chars) {
            strb.append(i);
        }
        
        return strb.toString();
    }
}
profile
대학생 | BE | 취준 | 습관이 나를 만든다
post-custom-banner

0개의 댓글