본문 바로가기
Java

프로그래머스) 문자열 정렬하기

by 스니펫 2023. 9. 28.

문제 설명

문자열 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.*;

class Solution {
    public int[] solution(String my_string) {
        // .length 배열의 길이 반환
        // .length() 문자열의 길이 반환
        int[] answer = new int[my_string.length()];
        int count = -1;
        
        for(int i = 0; i < my_string.length(); i++){
            if((my_string.charAt(i) >= '0') && (my_string.charAt(i) <= '9'))
                answer[++count] = my_string.charAt(i) - 48; 
                // int형 변환 시 아스키 코드 값으로 대입되기 때문에 0의 아스키 코드 값인 48을 빼준다.
        }
        
        // 삽입 정렬
        for(int i = 0; i < count; i++){
            for(int j = i + 1; j > 0; j--){
                if(answer[j - 1] > answer[j]){
                    int swap = answer[j - 1];
                    answer[j - 1] = answer[j];
                    answer[j] = swap;
                }
            }
        }
        
        // 0 ~ count 길이까지 배열 복사
        answer = Arrays.copyOfRange(answer, 0, count + 1);
        
        return answer;
    }
}

 

import java.util.*;

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

	// str.replace("a", "x"); str의 모든 a가 x로 change
	// str.replaceAll("[a-z]", "x"); str의 모든 a~z의 값이 x로 change (replace와 다르게 특정 규칙을 가진 문자열의 집합인 [정규표현식] 사용 가능)
        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;
    }
}

'Java' 카테고리의 다른 글

컬렉션  (0) 2023.10.20
연산자, for 문, 배열과 String 메소드  (0) 2023.10.19
래퍼 클래스, 참조형 변수, 형 변환  (0) 2023.10.17
JVM, Java 실행 과정, 변수  (1) 2023.10.13
문자열 비교  (0) 2023.10.02