첫 풀이
처음으로 시도해본 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
}
그런데 여기서
라는 의문점이 생길 수 있다.
사실 Math
함수의 메소드를 사용하는 순간, 문자열도 parseFloat()
함수를 통해 실수로 변환되기 때문에 음수, 양수 별도의 구분없이 편리하게 최대값과 최소값을 구할 수 있다.
꿀팁이니 알아두도록 하자!