이분 탐색에 대한 알고리즘 문제를 풀다가 Number()를 사용하니 출력값이 undefined가 나오고 parseInt()를 사용하니 제대로 된 출력값이 나왔다
문제의 코드다!
function solution(target, arr){
let answer;
arr.sort((a, b)=>a-b);
let lt=0, rt=arr.length-1;
while(lt<=rt){
let mid=parseInt((lt+rt)/2);
if(arr[mid]===target){
answer=mid+1;
break;
}
else if(arr[mid]>target) rt=mid-1;
else lt=mid+1;
}
return answer;
배열에서 target 값을 찾는 문제였는데 변수 mid의 값이 Number()를 쓰면 3.5 , 13.5 이렇게 나올 수도 있던거다. 그렇다면 arr[3.5]를 찾고있으니 undefined이 나올 수 밖에 없었다.
let test = '100.12345';
parseInt(test); // 100
Number(test); // 100.12345
parseFloat(test); // 100.12345
let test = '25살';
parseInt(test); // 25
Number(test); // NaN
'25'라는 숫자와 나이를 칭하는 "살"을 더한 문자열을 변환봤을 때 차이이다.
let test = '제1회';
parseInt(test); // NaN
Number(test); // NaN
'제'라는 문자열로 시작했을 때의 예제이다.
parseInt()는 문자열로 된 부분에서 숫자(정수)만 뽑아서 변환해주는것이 특징이다.
Number()은 문자열 전체가 숫자일때 소수점까지 숫자타입으로 가져올 수 있다.
이 둘의 차이점을 명확히 구분하여 필요할 때마다 적절히 활용하면 될 것 같다.
100점