본문 바로가기
🍪 Ect/#Study

[99클럽 코테 스터디] 12일차 TIL 정렬

by 개발한 너굴씨 2024. 8. 2.
728x90

 

 

오늘의 문제는 프로그래머스

 

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

 

 

문제

 

 

 

문제 설명 

 

주어진 s는 영어 대소문자로만 구성된 문자열입니다. 이 문자열을 내림차순 정렬해야 합니다. 단, 대문자는 소문자보다 작은 것으로 취급합니다. 예를 들어 s가 "BabA"라면 "baBA"가 반환됩니다. 

 

 

 

문제 풀이 시간 

권장 풀이 시간은 30분이었고, 저는 26분이 걸렸습니다. 

 

 

 

문제 접근 방식

우선, 아스키코드를 활용하면 풀이가 쉬울 것이라고 생각했습니다. 아스키코드로 변환하면 대문자가 소문자 보다 값이 작기 때문에 Arrays.sort()를 사용하면 문제에서 요구하는 대로 대문자가 소문자 보다 작은 내림차순 정렬 문자열이 나올 것이라고 생각했습니다. 

 

 

 

문제 풀이

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

class Solution {
    public String solution(String s) {
        String answer = "";
        
        String[] arr = s.split("");
        Integer[] answerArr = new Integer[arr.length];
        
        for(int i = 0; i < arr.length; i++) {
            int num = arr[i].charAt(0);
            answerArr[i] = num;
        }
        
        Arrays.sort(answerArr, Collections.reverseOrder());
        
        char[] charArr = new char[answerArr.length];
        
        for(int i = 0; i < answerArr.length; i++) {
            charArr[i] = (char) answerArr[i].intValue();
        }
        
        // answer = String.join("", charArr);
        answer = new String(charArr);
        
        return answer;
    }
}

 

 

문자열을 아스키코드 값으로 변환하기

 

charAt() 메서드를 사용하면 문자열을 아스키코드 값으로 변환할 수 있습니다. 

먼저 문자열을 배열로 변환합니다. charAt(0) 메서드를 사용하면 해당 문자의 아스키코드 값을 int 형으로 반환합니다. 따라서 charAt(0) 메서드를 사용해서 배열의 각 문자를 아스키코드 값으로 변환할 수 있습니다. 

        String[] arr = s.split("");
        Integer[] answerArr = new Integer[arr.length];
        
        for(int i = 0; i < arr.length; i++) {
            int num = arr[i].charAt(0);
            answerArr[i] = num;
        }

 

 

 

Comparator 사용하기

어제도 Comparator에 대해 다뤘지만 Comparator를 받기 위해선 객체를 사용해야 합니다. 기본형 배열(int[])로 선언하면 기본값인 오름차순으로만 정렬 할 수 있고 Comparator를 받을 수 없습니다. 따라서 Integer 객체 배열을 사용해 배열을 생성해야 합니다. 

// int[] answerArr = new int[arr.length];
Integer[] answerArr = new Integer[arr.length];

 

 

 

아스키코드 값을 문자열로 변환하기

먼저, 아스키코드를 문자열로 변환해 저장할 배열을 생성합니다. 이후 반복문을 사용해 배열의 각 요소를 순회하며 intValue() 메서드를 사용해 Integer 객체인 answerArr[i]의 값을 int형으로 변환을 합니다. 변환된 int 값을 (char)로 캐스팅하여 해당 아스키코드 값을 문자로 변환합니다. 

        char[] charArr = new char[answerArr.length];
        
        for(int i = 0; i < answerArr.length; i++) {
            charArr[i] = (char) answerArr[i].intValue();
        }

 

 

이렇게 오늘 12일차 TIL을 작성해 보았습니다.

 

 

 

 

728x90

댓글