본문 바로가기
하루하루/프로그래머스 문제풀이

[Lv.0 - Java] 120850. 문자열 정렬하기 (1)

by 키튼햄 2023. 12. 9.

문제

 

 

 

 

풀이

두 가지 방법을 생각했다. 1) int[] 배열을 그대로 사용하는 방법.  2) List 배열로 바꾼 후 사용하는 방법. 

List배열을 이용하면 더 간단할 것 같았으나 문제에서는 int[] 배열을 주었기에 얘로 처음에 코드를 만들어 보았다.

 

1) int[] 배열을 그대로 사용하는 방법.

먼저 my_string의 숫자만 골라 넣은 int[] 배열을 생성해주려고보니 my_string 안의 숫자가 몇개가 있는지를 모르니까 answer의 길이를 모르니 answer 배열을 만들수가 없었다. 그래서 먼저 answer의 길이를 알기위해 count 변수를 초기화선언하고, for문과 toCharArray(), Character.isDigit()을 사용하여 my_string 문자열 안의 각각의 문자가 숫자라면 count 값이 올라가도록 한다.

그리고 답이 들어갈 answer 배열을 길이를 정해서 새로 만들어준다.

더해서 answer의 인덱스로 사용할 변수인 idx도 선언해준다.

for문을 이용해 my_string 문자열 안의 문자가 숫자라면 answer[idx] 자리에 들어가도록 한다. 이때, 숫자는 문자아기 때문에  Character.getNumericValue(str) 를 통해 숫자로 바꾸어 저장한다. 이렇게 해주는 이유는 숫자 오름차순으로 정렬할 것이기 때문이다.

그 후에 Arrays.sort() 메소드를 이용해 오름차순으로 숫자를 정렬한 후 반환한다.

 

2) List 배열로 바꾼 후 사용하는 방법. 

동적 데이터 구조인 ArraysList<> 배열을 선언하면 따로 길이를 알지 않아도 된다. 

따라서 먼저 List, ArraysList를 사용할 수 있도록 해당 패키지를 import한 후 List 배열을 선언한다.

 

for문, toCharArrays(), Character.isDigit()을 이용해서 my_string 문자열 안에서 숫자인 문자열을 골라내고 .add() 를 이용해서 Character.getNumericValue(str) 로 문자타입인 숫자들을 숫자타입으로 answer 배열 안에 넣는다.

List배열은 Arrays 패키지가 아닌 Colletions 패키지를 사용한다.

Collections.sort()를 이용해 answer 배열 속의 숫자들을 오름차순으로 정렬한 후 반환한다.

 

 

 

 

코드

1. int[] 배열 사용

import java.util.Arrays;

class Solution {
    public int[] solution(String my_string) {
        int count = 0;
        
        for(char str : my_string.toCharArray()){
            if(Character.isDigit(str)){
                count++;
            }
        }
        
        int[] answer = new int[count];
        int idx = 0;
        for(char str : my_string.toCharArray()){
            if(Character.isDigit(str)){
                answer[idx++] = Character.getNumericValue(str);
            }
        } 
        
        Arrays.sort(answer);
        
        return answer;
    }
}

 

 

2. List<> 배열 사용

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

class Solution {
    public List<Integer> solution(String my_string) {
        List<Integer> answer = new ArrayList<Integer>();

        for(char str : my_string.toCharArray()){
            if(Character.isDigit(str)){
                answer.add(Character.getNumericValue(str));
            }
        }
        
        Collections.sort(answer);
        
        return answer;
    }
}