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

Jun_Gyu·2023년 8월 28일
0

프로그래머스

목록 보기
9/14
post-thumbnail

첫 풀이

처음으로 시도해본 2레벨 문제이다.

입력받은 문자열에서 우선 빈칸을 기준으로 요소들을 구분해주어야 했기에 split 메소드를 사용하여 빈칸을 구분해주었으며, 최대값과 최소값을 담아줄 max, min 변수에는 배열numArr의 첫 인덱스 value값을 담아주었다.

이후 반복문과 조건문을 통해, 이미 지정된 최소 최대값보다 각각 작거나 큰 값들을 새롭게 누적시키는 전통적인(?) 방식으로 문제를 풀었으며,

이렇게 구해진 값은 마지막에 다시 배열에 담아 join메소드를 통해 빈칸으로 다시 구분해주었다.

(사실 return min + ' ' + max라고 적어주어도 무방하다!)

const solution = (s) => {
    let numArr = s.split(" "); // 빈칸 기준으로 구분
    let min = parseFloat(numArr[0]);  // 음수도 포함해주기 위해 parseFloat를 사용.
    let max = parseFloat(numArr[0]);  // Number를 사용해도 무관!
    for(let i=0; i<numArr.length; i++){
        let num = parseFloat(numArr[i]);
      if(min > num) {
            min = num   
      } else if(max < num) {
        max = num
      }
    }
    return [min, max].join(" ");
}

위와같이 코드를 작성했고, 이제 확인해보도록 하자.


굿굿



풀이개선

사실 최소값과 최대값을 구하는데 있어서는 Math 함수의 max, min 메소드를 이용하는것 만큼 편리한게 없다.

거기에다 split 메소드를 통해서 문자열 => 배열 형태로 변환도 가능하니, 전개 연산자를 활용해서 문제를 간단하게 해결하는 방법또한 존재한다.

const solution = (s) => {
    const numArr = s.split(" ");
    let max = Math.max(...numArr); // numArr 전체중 최대값 추출
    let min = Math.min(...numArr); //     ``` 	   최소값 추출
    
    return  min + ' ' + max
}

그런데 여기서

' 아니 numArr 배열에 저장된 값은 숫자형이 아니라 문자형일텐데?? ',

' 어떻게 Math 함수를 사용 할 수 있는거지..? '

라는 의문점이 생길 수 있다.

사실 Math함수의 메소드를 사용하는 순간, 문자열도 parseFloat() 함수를 통해 실수로 변환되기 때문에 음수, 양수 별도의 구분없이 편리하게 최대값과 최소값을 구할 수 있다.
꿀팁이니 알아두도록 하자!

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글