문제 설명
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 100
- my_string에는 숫자가 한 개 이상 포함되어 있습니다.
- my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
입출력 예
my_string | result |
"hi12392" | [1, 2, 2, 3, 9] |
"p2o4i8gj2" | [2, 2, 4, 8] |
"abcde0" | [0] |
입출력 예 #1 : "hi12392"에 있는 숫자 1, 2, 3, 9, 2를 오름차순 정렬한 [1, 2, 2, 3, 9]를 return 합니다.
입출력 예 #2 : "p2o4i8gj2"에 있는 숫자 2, 4, 8, 2를 오름차순 정렬한 [2, 2, 4, 8]을 return 합니다.
입출력 예 #3 : "abcde0"에 있는 숫자 0을 오름차순 정렬한 [0]을 return 합니다.
풀이
import java.util.Arrays;
class Solution {
public int[] solution(String my_string) {
// 문자열에서 숫자가 아닌 모든 문자를 제거
String str = my_string.replaceAll("[^0-9]", ""); // [a~z]도 가능
// 문자열을 정수 배열로 변환
int[] result = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
result[i] = str.charAt(i) - '0'; // 각 문자를 숫자로 변환
}
// 정수 배열 정렬
Arrays.sort(result);
return result;
}
}
Q.String인 str을 int[]에 어떻게 담을까?
str은 숫자로만 이루어진 문자열이므로, 이를 각 숫자로 변환하여 int[] 배열에 담으려면 문자열의 각 문자를 하나씩 쪼개고 변환하는 과정이 필요함.
Q.Arrays.sort(str); 부분, 숫자로 구성된 문자열도 sort() 메서드가 적용될까?
str이 문자열이기 때문에 Arrays.sort(str)는 오류 발생함. 문자열 자체에는 sort() 메서드를 바로 사용할 수 없음. 대신 정수 배열로 변환한 후에 Arrays.sort()를 적용해야 함.
Q.'0'를 빼주는 이유는?
'0'를 빼주는 이유는 문자(char)에서 정수(int)로 변환하기 위함
문자(char)와 아스키 코드
모든 문자는 아스키 코드 값으로 저장되어 있음.
예를 들어:
'0'의 아스키 값은 48이다.
'1'의 아스키 값은 49이다.
'2'의 아스키 값은 50이다.
...
'9'의 아스키 값은 57이다.
문자를 숫자로 변환
만약 '3'이라는 문자를 숫자 3으로 변환하려면 '3'의 아스키 값에서 '0'의 아스키 값을 빼야 함:
'3'의 아스키 값 = 51
'0'의 아스키 값 = 48
'3' - '0' = 51 - 48 = 3
정수로 변환 과정
str.charAt(i)는 문자(char) 타입을 반환하지만, 숫자처럼 사용하려면 아스키 값을 이용해 변환해야 한다.
그래서 '0'을 빼주면 문자 '0'부터 '9' 사이의 문자가 각각 정수 0부터 9로 변환된다.
'👨💻 Coding Test > Java' 카테고리의 다른 글
[Programmers/Java/Lv.0/수학 유형] 50.소인수분해 (1) | 2025.02.18 |
---|---|
[Programmers/Java/Lv.0/문자열 유형] 49.숨어있는 숫자의 덧셈 (1) (0) | 2025.02.17 |
[Programmers/Java/Lv.0/문자열 유형] 47.모음제거 (0) | 2025.02.10 |
[Programmers/Java/Lv.0] 46.팩토리얼 (0) | 2024.12.05 |
[Programmers/Java/Lv.0] 45.최댓값 만들기(1) (0) | 2024.12.04 |