본문 바로가기

분류 전체보기138

[javascript] index를 찾아 반환하는 메서드 const arr = [2, 5, 9, 2]; findIndex 주어진 판별함수를 만족하는 첫번째 요소의 인덱스를 반환 없으면 -1을 반환한다. arr.findIndex((item) => item > 3); // 1 arr.findIndex((item) => item > 10); // -1 indexOf 정해진 요소의 첫번째 인덱스를 반환 없으면 -1을 반환한다. arr.indexOf(2) // 0 arr.indexOf(10) // -1 // 두 번째 인자로 start index를 지정할 수 있다. arr.indexOf(2, 1) // 3 lastIndexOf 정해진 요소를 배열 맨 뒤에서부터 찾아 인덱스를 반환 없으면 -1을 반환한다. arr.lastIndexOf(2) // 3 arr.indexOf(1.. 2021. 1. 23.
[LeetCode] Count and Say leetcode.com/explore/interview/card/top-interview-questions-easy/127/strings/886/ "1"로 시작해서 재귀적으로 n번만큼 숫자를 세어 나가는 문제다. 문자열을 같은 문자끼리 몇 개 있는지 쪼개주는 함수와 세어주는 함수로 분리하여 구현했다. 복잡한 기능을 하는 문제의 경우엔 이렇게 필요할 것 같은 함수부터 조각조각 구현해 나가는 방식이 좋은 것 같다. /** * @param {number} n * @return {string} */ var countAndSay = function (n) { let str = "1"; for (let j = 1; j < n; j++) { const splitted = split(str); let temp = "".. 2021. 1. 23.
[Javscript] 알고리즘 풀이에 자주 사용되는 숫자 관련 메서드 정리 정확히 말하면 Math, Number객체, 프로퍼티, 메서드가 혼용되어 있지만... 아무튼 자주 활용되는 것들을 정리하고자 한다. 수의 범위 관련 javascript에서 다룰 수 있는 수의 범위 -9007199254740991 ~ 9007199254740991 -Math.pow(2, 53) + 1 === Number.MIN_SAFE_INTEGER; // -9007199254740991 Math.pow(2, 53) - 1 === Number.MAX_SAFE_INTEGER; // -9007199254740991 BigInt -2^53이하 2^53이상의 수를 다룰 때 사용 +, -, *, /, %, ** 연산이 가능하다. const a = 2n ** 53n; // 9007199254740992n // inte.. 2021. 1. 20.
[LeetCode] Reverse Integer leetcode.com/explore/interview/card/top-interview-questions-easy/127/strings/880/ 포인트는 x를 "뒤집은 후"의 값이 -2^31 ~ 2^31 - 1 을 벗어나는 경우 0을 리턴하는 것이다. 실제로 javascript에서 핸들링 가능한 수는 -2^53 ~ 2^53 -1 이라고 한다. (tip. 외울 필요 없이, Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER로 접근 가능하다.) 그러므로 범위 내라면 integer로 계산 가능하기 때문에, Plus One 문제처럼 항상 string으로 다룰 필요는 없다. 범위값은 Math.pow함수를 사용해서 구하고, -를 제거하기 위해 Math.abs를 사용하면 간단하다.. 2021. 1. 20.
[LeetCode] Rotate Image, Reverse String Rotate Image leetcode.com/explore/interview/card/top-interview-questions-easy/92/array/770/ 굉장히 힘든 문제였다. 하나하나 자리 바꾸는 방식부터 살펴보자면 3중 for문을 사용하고 있는데, for문들은 사실 반복 횟수를 제한해주는 역할이라 중첩을 줄인다고 해서 효율이 올라가진 않기 때문에 효율 측면에서 그렇게 나쁘지는 않을것 같기는 하다. 다만 구현이 너무 헷갈리고 힘들었기 때문에 실전에서는 이렇게 할 수 있을까 하는 의문이 든다. 사실 문제에 제시된 이미지처럼 실제로 하나씩 옮겨야한다는 생각에 갇혀서 어렵게 풀었는데, Input Output을 자세히 들여다보니 좀 더 쉬운 방법이 보였다. [[1,2,3],[4,5,6],[7,8,9.. 2021. 1. 20.
[LeetCode] Valid Sudoku 주어진 2차원 배열 형태의 스도쿠 문제가 유효한지 리턴하는 문제다. leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/769/ Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com 풀이 /** * @param {character[][]} board * @return {boolea.. 2021. 1. 15.
[LeetCode] Move Zeros, Two Sum Move Zeros leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/567/ 배열에서 0을 모두 찾아 맨 뒤로 옮기면 된다. // https://leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/567/ /** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ var moveZeroes = function (nums) { let count = 0; let len = nums.length; for (let i = 0; i.. 2021. 1. 15.
[LeetCode] Plus One 숫자에 1을 더해서 리턴하면 되는 간단한 문제이지만, 배열로 쪼개져 있으며 숫자의 길이가 최대 100이므로 int로 변환해 1을 더하는 방식은 사용할 수 없다. leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/559/ /** * @param {number[]} digits * @return {number[]} */ var plusOne = function(digits) { // 1899 -> 뒤에서부터 반복을 돌며 9면 0, 아니면 +1한다. => 1900 // 99 -> 뒤에서부터 반복을 돌며 9면 0으로 바꾸고, 마지막에도 9라면 1을 처음에 추가한다. => 100 const last = digits.length - 1.. 2021. 1. 12.
[LeetCode] Single Number, Intersection of Two Arrays II Single Number 배열 요소에 짝 없이 혼자 있는 요소를 찾는 문제. 하나씩 뽑아서 짝을 찾아 제거하는 방식으로 풀었는데, 좀 더 좋은 방법이 없을까... leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/549/ /** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { // 반복문은 최대로 돌아도 주어진 배열 길이의 반만큼만 돌면 된다. const count = Math.floor(nums.length/2); for(let i = 0; i < count; i++){ const item = nums.shift(); con.. 2021. 1. 12.