코딩테스트

[코딩테스트 입문] 문자열 정렬하기 (1) ★

summ.n 2025. 4. 22. 23:31

🔸 문제 설명

문자열 my_string이 주어졌을 때,
그 안에 있는 숫자만 골라서 오름차순 정렬한 배열을 반환하는 문제입니다.

 

🔸 입출력 예시

my_string 결과
"hi12392" [1, 2, 2, 3, 9]
"p2o4i8gj2" [2, 2, 4, 8]
"abcde0" [0]

 

🔸 문제 해결 흐름

  1. 문자열에서 숫자만 남기기
    → 소문자 제거: replaceAll("[a-z]", "")
  2. 문자들을 숫자로 변환해서 배열에 담기
    → charAt(i) - '0' 사용
  3. 배열을 정렬하기
    → Arrays.sort(answer)

 

🔸 최종 정답 코드

import java.util.Arrays;

class Solution {
    public int[] solution(String my_string) {
        my_string = my_string.replaceAll("[a-z]", ""); // 1. 소문자 제거

        int[] answer = new int[my_string.length()]; // 2. 숫자 개수만큼 배열 생성

        for (int i = 0; i < my_string.length(); i++) {
            answer[i] = my_string.charAt(i) - '0'; // 3. 문자 → 숫자 변환
        }

        Arrays.sort(answer); // 4. 오름차순 정렬

        return answer;
    }
}

 

 

🧠 내가 헷갈렸던 부분 정리

❓ charAt(i) - '0' 이 뭐지?

  • 문자열 "123" 은 실제로는 문자들 '1', '2', '3'로 구성돼 있음
  • 문자와 숫자는 다름!
    예: '1'은 숫자 1이 아니라 문자 코드 49
  • '1' - '0' = 49 - 48 = 1
    → 이렇게 하면 진짜 숫자 1이 됨!
'7' - '0' → 55 - 48 = 7  
'0' - '0' → 48 - 48 = 0  
'9' - '0' → 57 - 48 = 9

 

 

💡 포인트 요약

개념 설명
replaceAll("[a-z]", "") 문자열에서 소문자 제거
charAt(i) 문자열에서 문자 하나 가져오기
'문자' - '0' 문자 → 숫자로 변환하는 방법
Arrays.sort() 정수 배열 정렬