본문 바로가기
알고리즘

[프로그래머스][JS] Lv.2 최댓값과 최솟값

by codnjs779 2022. 10. 20.

문제 설명

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최솟값과 최댓값을 찾아 이를 "(최솟값) (최댓값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를 들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

제한 조건
  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
입출력 예
"1 2 3 4" "1 4"
"-1 -2 -3 -4" "-4 -1"
"-1 -1" "-1 -1"

 

[풀이 과정]

1. 공백 기준으로 문자열 잘라서 배열화

2. 배열에서 최대, 최소 값 구하기

 

공백을 기준으로 문자열을 자르면 숫자 -> 문자로 타입의 변화가 일어난다. 

여기에 map(Number)를 해주면, 문자열로 변환 되었던 배열이 다시 숫자로 변환된다.

이때까지만 해도 나름 좋은 방법을 생각해서 풀고 있다고 생각했다,,,ㅎㅎ 다른 사람 코드를 보기 전까지 

 

일단 내 방법대로 코드를 작성하면, 아래와 같다.

const solution = () => {
    let newArr = s.split(' ').map(Number)
    const max = newArr.reduce((a,b) => {
        return a > b ? a:b
    })
    const min = newArr.reduce((a,b) => {
        return a > b ? b:a
    })
    newArr = String(min) +" "+String(max)
    return (newArr)
}

새로 만들어진 배열인 newArr에서 최댓값 최솟값을 구해서 반환 값으로 사용해줄 변수에 출력 조건에 맞게 선언 해준 다음 return을 했다. 이렇게 하면 좋은 방법 같진 않은 게 시간이 너무 오래 걸린다,,!!! 

 

🔽

 

다른 사람 코드를 참고해봤는데 전혀 생각하지 않은 방법이 있어서 또 많이 배웠다,,,,ㅎ 👍✨

function solution(s) {
    const arr = s.split(' ');

    return Math.min(...arr)+' '+Math.max(...arr);
}

 

생각을 못했던 부분인데 js는 타입을 따로 지정해주지 않는 언어이기 때문에 Math함수가 문자열에도 적용된다는 점이다.

이 부분을 완전 생각을 못하고 있었다. 위와 같이 코드를 작성하면, 

 

시간도 엄청 빠르고 메모리도 아주 작지만 적게 먹는다,,,!!!! 완전 잘 쓴 코드 같음.

자바스크립트가 엄청 유연한 언어라서 타입 관련해서 복잡해지는 면도 있지만 이런 경우가 있으니까 잘 활용하면 좋기도 한 것 같다. 여하튼 저 코드는 아주 👍✨👍✨