문자열 정렬하기(1)

이윤설·2024년 2월 7일

https://school.programmers.co.kr/learn/courses/30/lessons/120850

제출코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public List solution(String my_string) {
        char[] strArray = my_string.toCharArray(); // [h,i,1,2]
        List list = new ArrayList<>();

        for (int i = 0; i < strArray.length; i++) {
            if (strArray[i] == '1' || strArray[i] == '2' || strArray[i] == '3' ||
                    strArray[i] == '4' || strArray[i] == '5' || strArray[i] == '6' ||
                    strArray[i] == '7' || strArray[i] == '8' || strArray[i] == '9' ||
                    strArray[i] == '0') {
                String str = String.valueOf(strArray[i]);
                int number = Integer.parseInt(str);
                list.add(number);
                Collections.sort(list);                
            }
        }
        return list;
    }
}

모범답안 1

import java.util.*;

class Solution {
    public List<Integer> solution(String my_string) {
        char[] strArray = my_string.toCharArray();
        List<Integer> list = new ArrayList<>();

        for (char c : strArray) {
            if (Character.isDigit(c)) {
                int number = Character.getNumericValue(c);
                list.add(number);
            }
        }
        Collections.sort(list);

        return list;
    }
}

모범답안 2

class Solution {
    public int[] solution(String my_string) {
        // 문자열에서 알파벳을 모두 제거하여 숫자만 남깁니다.
        // "hi12" -> "12"
        my_string = my_string.replaceAll("[a-z]", "");

        // 결과를 저장할 배열을 문자열의 길이와 동일한 크기로 생성합니다.
        // int[] answer = new int[2]
        int[] answer = new int[my_string.length()];

        // 문자열의 각 문자를 숫자로 변환하여 배열에 저장합니다.
        // int number = '2' - '0'
        for (int i = 0; i < my_string.length(); i++) {
            // 각 문자의 아스키 코드 값에서 '0'의 아스키 코드 값을 빼줌으로써 해당 문자가 나타내는 숫자를 구합니다.
            answer[i] = my_string.charAt(i) - '0';
        }

        // 배열을 정렬합니다.
        Arrays.sort(answer);

        // 결과 배열을 반환합니다.
        return answer;
    }
}



정리

1) replaceAll()은 String에서 원하지 않는 값을 제거할 때 사용할 수도 있다.
ex)

String str = "hi12345";
newString = str.replaceAll("12345", ""); 
// newString은 hi가 된다.

2)

  • Character.getNumericValue(char):

Character.getNumericValue(char) 메서드는 주어진 문자에 대해 해당하는 숫자 값을 반환합니다.
이 메서드는 문자가 0에서 9까지의 숫자인 경우 해당하는 숫자 값을 반환하고, 그렇지 않은 경우 -1을 반환합니다.
예를 들어, Character.getNumericValue('5')는 5를 반환하고, Character.getNumericValue('a')는 -1을 반환합니다.

  • '0' 연산자:
    문자 '0'의 아스키 코드 값은 48입니다. 아스키 코드 값은 숫자 0부터 시작하므로 '0'의 아스키 코드 값에 숫자를 빼면 해당하는 숫자를 얻을 수 있습니다.
    예를 들어, '5'의 아스키 코드 값은 53이고, '0'의 아스키 코드 값은 48입니다. 따라서 '5' - '0'은 53 - 48인 5를 반환합니다.
    이 방법은 문자가 '0'에서 '9' 사이에 있을 때만 사용할 수 있습니다. 다른 문자는 올바른 결과를 보장하지 않습니다.

이 두 가지 방법은 문자를 숫자로 변환하는 데 사용될 수 있지만, Character.getNumericValue(char)는 숫자 이외의 문자에 대해 -1을 반환하므로 특정 상황에 더 유용할 수 있습니다. 그러나 문자가 '0'에서 '9' 사이에 있을 때는 간단하게 아스키 코드 값의 차이를 이용하는 방법도 효과적입니다.

3) boolean Character.isDigit() : char를 대상으로 숫자인지 검사한다. 만약 숫자라면, true를 반환한다.

4) Collections.sort() : List를 오름차순으로 정렬한다.

Collections.sort(리스트명, Collections.reverseOrder()): List를 내름차순으로 정렬한다.

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글