프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 문자열 정렬하기(1)(Java)

Sigfriede 2023. 3. 27. 22:44

  문제 설명

  문자열 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]
import java.util.Arrays;
class Solution {
    public int[] solution(String my_string) {
        String intString = my_string.replaceAll("[^0-9]", "");
        int[] answer = new int[intString.length()];
        for (int i = 0; i < intString.length(); i++) {
            answer[i] = Integer.parseInt(intString.substring(i, i + 1));
        }
        Arrays.sort(answer);
        return answer;
    }
}

  이번에도 마찬가지로 replaceAll과 정규식을 사용해서 풀었습니다. 먼저 0에서 9까지의 숫자를 제외하고 모두 문자열에서 제거했습니다. answer 배열의 길이는 앞서 숫자만 남은 문자열인 intString의 길이만큼으로 설정했습니다. 이후 intString의 길이만큼 for문을 순회하면서 substring 메소드로 i부터 i + 1를 가져옵니다.

 

변수명.substring(시작위치, 종료위치)

 

  만약 괄호에 숫자 하나만 넣는다면 종료위치가 생략되어, 시작위치 이후의 값을 모두 가져올 것입니다. answer는 int 배열이므로 string 값을 Integer.parseInt를 통해 숫자로 변환하여 answer의 i번째 인덱스에 차례차례 넣어줍니다. 문제에서는 정렬된 배열값을 원하므로, answer를 반환하기 전에 Arrays.sort로 정렬을 해주었습니다.

  substring 대신 charAt(i)를 쓰는 분들이 많은데, 다음에는 charAt(i)의 사용을 고려해봐야 할 것 같습니다.

 

  replace를 이용한 다른 문제(replace와 replaceAll의 차이 설명)

  [프로그래머스 코딩테스트] 특정 문자 제거하기(Java) https://sigfriede.tistory.com/34

  replaceAll을 이용한 다른 문제

  [프로그래머스 코딩테스트] 모음 제거(Java) https://sigfriede.tistory.com/44