본문 바로가기
algorithm/Programmers

[JAVA] 문자열 정렬하기(1)

by 이쟝 2023. 1. 24.

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.


제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string에는 숫자가 한 개 이상 포함되어 있습니다.
  • my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다. - - -

입출력 예

my_stringresult

"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 합니다.

1. 내가 푼 문제

import java.util.Arrays;

class Solution {
    public int[] solution(String my_string) {
        int count = 0;
        StringBuilder sb = new StringBuilder();
        
        // 문자열에서 숫자만 빼기
        for(int i=0;i<my_string.length();i++){
            if(0 <= my_string.charAt(i)-'0' && my_string.charAt(i)-'0' <= 9 ) {
                count++;
                sb.append(my_string.charAt(i)-48);
            }
        }
        // 숫자를 넣을 answer 배열
        int[] answer = new int[count];
        for(int i=0;i<count;i++){
           answer[i] = Integer.parseInt(sb.substring(i, i+1));
        }
        
        // 오름차순 정렬
        Arrays.sort(answer);
        
        return answer;
    }
}

2. replaceAll( )사용

import java.util.*;

class Solution {
    public int[] solution(String my_string) {
        my_string = my_string.replaceAll("[a-z]", ""); //12392
        
        int[] answer = new int[my_string.length()];
        for(int i=0;i<answer.length;i++) {
            answer[i] = my_string.charAt(i)-'0';
        }
        Arrays.sort(answer);
        
        return answer;
    }
}

- arraylist나 list를 안쓰려고 stringbuilder를 사용해서 했는데 다른 사람이 푼 코드보다 좀 더 길어졌다.. 알고보니 replaceAll()을 사용했다...! replaceAll메서드 사용하기..!

String replace(찾을 문자열, 바꿀 문자열);
String replaceAll(정규식 또는 기존문자, 대체문자)
String str = "커피의 가격은 10,000원 입니다.";
str.replaceAll("[0-9]", "A"); // 커피의 가격은 AA,AAA원 입니다.

replace는 문자로 인식하고, replaceAll은 정규식으로 인식한다.