본문 바로가기
Coding Test

230926 문자열 정렬하기 (1) - Level 0

by mmm- 2023. 9. 26.

문제 설명

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

제한사항

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

 

입출력 예

 

입출력 설명

입출력 예 #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.*;

class Solution {
    public int[] solution(String my_string) {
        int[] answer = {};
        List<Integer> list = new ArrayList<Integer>();
        char check;
        
        for(int i=0; i<my_string.length(); i++) {
            check = my_string.charAt(i);
            if(Character.isDigit(check)) {
                list.add(check - '0');
            }
        }
        answer = new int[list.size()];
        
        for(int i=0; i<list.size(); i++) {
            answer[i] = list.get(i);
        }
        Arrays.sort(answer);

        return answer;
    }
}

 

풀이

반복문으로 check 변수를 통해 my_string의 문자들이 숫자인지 문자인지 확인 후 숫자라면 숫자로 변환하여 가변적인 ArrayList에 추가를 해준다. 그 후, list의 크기만큼 answer 배열을 할당해주어 반복문을 이용해 list에 있는 값들을 answer배열로 옮겨 반복문이 끝나면 answer배열을 정렬해준다.


다른 코드와 풀이

아래의 코드는 다른 사람들이 작성한 것들로, 내 코드와 비교, 참고하기 위해 가져왔다.

import java.util.*;

class Solution {
    public int[] solution(String myString) {
        return Arrays.stream(myString.replaceAll("[A-Z|a-z]", "").split("")).sorted().mapToInt(Integer::parseInt).toArray();
    }
}

정규표현식을 통해 숫자가 아닌 A-Z, a-z는 모두 빈문자열로 바꿔준 후 이를 정렬해준다. 그 후 myString을 integer로 변환하고 Stream을 배열로 바꿔준다.


import java.util.*;

class Solution {
    public int[] solution(String my_string) {

        my_string = my_string.replaceAll("[a-z]","");

        int[] answer = new int[my_string.length()];

        for(int i =0; i<my_string.length(); i++){
            answer[i] = my_string.charAt(i) - '0';
        }

        Arrays.sort(answer);

        return answer;
    }
}

my_string의 a-z를 빈문자열로 대체한 후 for문을 이용해 my_string을 숫자로 변환하여 answer 배열에 넣어준 후, 배열이 끝나면 정렬해준다.


정리

정규표현식
: 문자열 데이터 중 원하는 조건과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것.
 
(참고; https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A0%95%EA%B7%9C%EC%8B%9DRegular-Expression-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC)