📌 Number.MAX_SAFE_INTEGER
📌 Number.MIN_SAFE_INTEGER
📌 Math.ceil(숫자)
📌 Math.floor(숫자)
📌 Math.round(숫자)
📌 Array.from()
📌 break & continue
📌 split()
오늘은 알고리즘을 풀면서 새롭게 보거나 이전에 사용하거나 본적은 있지만 제대로 알지 못하는 개념들에 대해 TIL을 작성해보려고 한다!!!
Number.MAX_SAFE_INTEGER
는 간단하게 설명하자면, 자바스크립트에서 안전하게 저장할 수 있는 최대 정수값을 의미한다.
알고리즘을 풀며 활용했던 방법은 예를들어 정수로 이루어진 배열이 있을 때, 가장 최소값을 찾는다고 해보자
Number.MAX_SAFE_INTEGER
는 안전한 최대 정수이기 때문에 변수에 해당 값을 할당하고 배열을 순회하며 최소값을 찾을 수 있다.
이와 같이 Number.MAX_SAFE_INTEGER
를 활용하게 되면 정수로 이루어진 데이터를 다룰 때 최대값을 미리 정하고 조작할 수 있다는 장점이 있다.
그동안은 정수들 사이에서 최소값 또는 최대값을 찾을 떄 Math.min()
또는 Math.max()
함수를 사용하여 풀었지만 정수 중 최대값과 최소값을 할당하는 방법을 알게 되어, 향후 난이도가 높은 알고리즘을 풀어야 할 때, 정수를 다루는 문제를 풀 때 도움이 될 것 같다.
// 최소값 찾기 let arr = [6, 3, 7, 9]; let answer = Number.MAX_SAFE_INTEGER; for(let i=0; i<arr.length; i++){ if(arr[i] < answer) answer = arr[i] } console.log(answer) // 3
반대로 Number.MIN_SAFE_INTEGER
는 안전하게 저장할 수 있는 최소 정수값을 의미한다. Number.MAX_SAFE_INTEGER
과 마찬가지로 정수를 다루거나 조작할 때, 최소값을 활용하여 손쉽게 정수를 다룰 수 있다.
// 최대값 찾기 let arr = [6, 3, 7, 9]; let answer = Number.MIN_SAFE_INTEGER; for(let i=0; i<arr.length; i++){ if(arr[i] > answer) answer = arr[i] } console.log(answer) // 9
앞으로 이어지는 3가지 내용들은 모두 자바스크립트에서 소수점을 다루는 법을 알아볼 것이다.
소수점을 다루는 방법을 알게되면 단순히 올림, 내림, 버림과 같은 수학적인 기능을 사용할 수 있을 뿐만 아니라 짝수나 홀수를 다루는 문제에서도 유용하게 사용할 수 있다.
Math.ceil()
은 소수값이 존재할 때, 값을 올림하는 역할을 한다.
나는 해당 함수를 외울 때, "ceil = 천장"과 연관지어 천장은 위에 있기 때문에 올림을 한다고 외웠다. 혹시나 Math.ceil()
에 대해 검색을 하다가 이 글을 읽게되는 사람들도 나와 같이 함수를 연관지어 암기하면 좋을 것 같다!!
let num = 3.2; let ceil = Math.ceil(num); console.log(ceil) // 4
Math.floor(숫자)
는 소수값이 존재할 때, 소수값을 버리는 역할을 한다.
즉, "floor = 바닥" 처럼 바닥에 버린다고 나는 암기했다 (이렇게 외우면 다음 잘 잊어먹지는 않는다!!)
let num = 3.2; let ceil = Math.ceil(num); console.log(ceil) // 3
마지막으로 Math.round(숫자)
는 소수값에 따라 올리거나 버리는 역할 (반올림 함수)의 역할을 한다. XX.5부터는 올림을 하고 XX.4부터 아래로는 버림을 한다. Math.round(숫자)
을 암기할때는 버리거나 올림할 수 있기 때문에 위아래로 움직인다고 생각하여 round라고 암기했다.
let num = 3.4; let ceil = Math.round(num); console.log(ceil) // 3 let num2 = 3.5; let ceil2 = Math.round(num2) console.log(ceil2) // 4
Array.from()
은 알고리즘 문제를 풀던 중, 특정 길이 크기의 배열을 만들어야 할 때 사용하면 유용한 메서드라는 것을 알게 되었다.
구체적으로는 유사 배열(Array-like) 객체나 iterable한 객체를 배열로 만들어주는 메서드이다.
여기서 유사 배열이란 키가 인덱스값이 되며 길이를 나타내는 속성을 갖는 객체를 의미한다.
let n = 5; Array.from({ length: n }, () => 1) // [1, 1, 1, 1, 1]; Array.from('ABC'); // ['A', 'B', 'C'];
break
문은 break;를 사용한 곳에서 해당 조건문 블록과 밖의 반복문 자체를 탈출하는 것을 의미한다.
즉, 제어흐름(반복)을 중단하고 나온다.
let num = 0; for(let i=0; i<10; i++){ num++ if(i === 5) break; } console.log(num) // 6
반면에 continue
는 코드 실행을 건너뛴다. 즉, 예를들어 for문 수행 도중에 continue
문을 만나게 되면 for문의 처음으로 돌아가게 된다.
for(let i=0; i<10; i++){ if(i%2 === 0) { continue } console.log(i) } // 1 3 5 7 9
split()
메서드는 종종 사용하는 메서드이다. 하지만 매번 사용함에도 불구하고 항상 헷갈리는 부분이 해당 메서드를 배열에서 사용할 수 있는지 문자열에서 사용할 수 있는지 헷갈린다는 것이다.
따라서 오늘 이후로는 이러한 고민을 하지 않기 위해 TIL 주제로 선정하게 되었다.
split()
메서드는 문자열을 특정 구분자를 기준으로 잘라 배열로 만드는 것이다!!!
매개변수가 없을떄는 문자열 전체를 배열에 담아 리턴하며 두번째 매개변수로 limit 값을 주어 구분자를 기준으로 배열의 길이다 3개로 나눠지더라도 2의 길이를 갖는 배열로 만들어진다.
let str = "I like Korea"; str.split() // [ 'I like Korea' ] str.split("") // [ 'I', ' ', 'l', 'i', 'k', 'e', ' ', 'K', 'o', 'r', 'e', 'a' ] str.split(" ") // [ 'I', 'like', 'Korea' ] str.split(" ", 2) // [ 'I', 'like' ]
요즘 날씨가 점점 더워지고 있다. 매년 여름이 점점 빨리 다가오는 것 같다.
오히려 너무 더워서 빨리 카페로 공부하러 나가기 때문에 더 좋은 것일 수도 있다. ㅎㅎ
평소 알고리즘 문제를 하루에 5개정도 푸는데, 오늘은 한 문제에서 너무 많은 시간을 사용해 2문제 밖에 못풀었다. 하지만, 이런 경험이 점점 나의 실력을 향상시키는 것이라 생각한다. 한 예로 몇달전에 못풀었던 알고리즘 문제를 오늘 다시 한번 풀었는데 손쉽게 풀었다!!
이렇게 하루하루 성장하는 것이 중요하다고 생각한다. 물론 그러려면 매일 부족한 부분을 채우고 TIL로 정리해 나가는 것이 중요하다고 생각한다. 오늘도 수고한 나에게 너무 고마운 하루다~~