const numbers = "10 11 5 6 12 7 3 9";
공백으로 구분된 8개의 숫자들 중 최댓값을 반환하는 코드를 작성해 주세요.
function extractNum(str) { if(str[str.length-1] !== " "){ str += " "; } let curPos = 0; const numArr = []; let flag = 0; while(flag === 0) { let numStr = ""; if(str.indexOf(" ",curPos+1) !== -1) { let nextPos = str.indexOf(" ",curPos+1); for(let i = curPos; i < nextPos; i++){ numStr += str[i]; } numArr.push(parseInt(numStr)); curPos = nextPos; } else { flag = 1; } } return Math.max(...numArr); } console.log(extractNum(numbers));
공백을 구분자로 indexOf를 사용할 시 엄청난 문제점이 있었다. 당연하게 마지막 공백 이후 indexOf의 리턴값이 -1이었는데,
문자열을 파싱하는 for문의 조건식의 범위를 현재 공백의 인덱스부터 다음 공백의 인덱스로 지정했다보니 현재 공백이 마지막 공백일 경우 마지막 문자열이 파싱이 안되는 문제가 생겼다.
콘솔로그만 찍으면서 겁나 고민하다가,,
어? 그냥 문자열 받을 때 뒤에 공백 붙이면 되는 거 아님?
이라는 생각이 들었고,
if(str[str.length-1] !== " "){
str += " ";
}
이 코드를 추가하게 되었다.
const numbers = "10 11 5 6 12 7 3 9" const arr = numbers.split(' ').map(num => parseInt(num)) console.log(Math.max.apply(null, arr))
const numbers = "10 11 5 6 12 7 3 9" const arr = numbers.split(' ').map(num => parseInt(num)) console.log(Math.max(...arr))
const numbers = "10 11 5 6 12 7 3 9" const arr = numbers.split(' ').map(num => parseInt(num)) const maxValue = arr.sort((a, b) => { return b - a })[0] console.log(maxValue)
메소드를 잘 활용하면 훨씬 쉽게 접근할 수 있다.
split() / map() / 화살표 함수 / sort() 공부할 것!