[프로그래머스] 문자열 정렬하기(1) #캐릭터 👉 정수 변환

J.A.Y·2023년 8월 29일
0

자료구조/알고리즘

목록 보기
2/17
post-thumbnail

문제


문제 설명

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


제한사항

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

입출력 예

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

풀이

function solution(my_string) {
    var answer = [];
    
    for (let i = 0; i < my_string.length; i++) {
        for (let cnd = 0; cnd < 10; cnd++ ) {
            if (parseInt(my_string[i]) === cnd) {
                answer.push(my_string[i])
         }}
    }
  
    return answer.sort((a,b) => a-b).map(answerEl => parseInt(answerEl));
}
  • 객체의 각 캐릭터들을 정수로 변환하기 위해 parseInt() 적용
    • 반대로 Number타입인 cnd를 String 타입으로 변환시키려면 cnd.toString을 적용하면 된다.
map(Number)이라는 더 간단한 방법을 나중에 알게 됐다. 😅
  • 타입이 숫자면 answer 배열에 push
  • sort() 메소드로 오름차순으로 배열을 정렬해주고
  • answer 역시 객체이므로 map() 메소드로 각 캐릭터들을 호출하여 정수로 변환시켜준다.

새롭게 알게 된 거나 느낀 것

  • 솔직히 이 문제는 정렬보다 String 타입에서 Number만 쏙쏙 골라내는 것이 관건이었다. 그래서 처움에 풀 때 내가 알고 있는 지식을 총동원해typeof() 메소드도 사용해보고, toNumber, isNaN도 써봤지만 해결되지 않아 진땀을 뺐다. 그런데 배열의 각 요소나 캐릭터의 타입 변환을 map() 메소드로 변환시킬 수 있다는 사실을 발견하고 적용하니 금방 해결할 수 있었다.

그 외 풀이 2개

(1)

function solution(my_string) {
    return Array.from(my_string).filter(v => !isNaN(+v)).sort((a,b) => a - b).map(v => +v);
}
  • Array.from()으로 my_string 객체를 우선 배열로 만들어준다.
  • 그 뒤, my_string 배열을 숫자타입인 요소들로 재배열 후 sort로 오름차순 정렬을 해준다.
  • !isNaN(+v) : 문자열에+를 덧붙여주면 숫자로 변환된다.
  • map()메소드로 다시 각 요소들을 호출해 숫자로 변환시켰는데.. 아마 앞에서 재배열 된 객체 배열은 string 타입의 '숫자'들로 이루어진 것이기 때문에 이 코드가 추가된 것이 아닐까 싶다.

(2)

function solution(my_string) {
    return my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));
}
profile
Done is better than perfect🏃‍♀️

0개의 댓글