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

ZZEON·2024년 1월 2일
0

문제 설명

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

제한 조건

s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

문제 풀이

처음에는 이 문제를 보고 split를 써야겠다고 생각을 했고, 그 뒤로는 for문을 돌면서 최대값과 최소값을 돌면 된다고 생각했다. 하지만.. 우리에게는 Math 메소드가 있다는 것! 그래서 두 가지 방법 다 사용해서 풀이를 하고 싶었다.

위와 같이 작성하니 테스트 2에서 실행이 안되었다.
아무래도 음수를 음수로 받아오는 게 아니라 절대값 형태로 숫자를 받아와서 비교하는 것 같다.
그래서 answer에 들어있는 것을 Number를 사용해 숫자로 변경해주니 바로 성공이 뜨는 걸 볼 수 있었다.

function solution(s) {
    var answer = s.split(' ');
    let max = -100;
    let min = 100;
    for(let i = 0; i < answer.length; i++){
        if(max < Number(answer[i]))
            max = Number(answer[i])
        if(min > Number(answer[i]))
            min = Number(answer[i])
    }
    return min + " " + max;
}

하지만 Math 메소드를 사용하면 코드양이 반토막이 난다.
코드가 몇 줄 안될 뿐더러, 위에 for문에서 걸리는 시간보다 더 적은 시간이 걸리므로 Math 메소드를 안 쓸 이유가 없다.

function solution(s) {
    var answer = s.split(' ');
    var max = Math.max(...answer)
    var min = Math.min(...answer)
    return min + " " + max;
}

+) sort로 풀어도 될 거 같아서 sort로 푼 방법도 남겨본다.

function solution(s) {
    var answer = s.split(' ');
    answer.sort((a, b) => b -a);
    return answer[answer.length-1] + " " + answer[0]
}
profile
프론트엔드 개발과 디자인을 좋아합니다

0개의 댓글