⚡문제정보 주어지는 입력에서 대부분의 요소들은 단 2번 등장하지만 드물게 한번만 등장하는 요소들이 있다고 합니다. 이 한번만 등장하는 요소들을 찾아서 배열로 만들어 반환하는 것이 조건입니다. 보통 2번만 등장하니까 객체형태로 카운팅을 해주면서 카운팅한 값이 2가 되는 순간 딜리트해주면되겠네요 🔍접근방법 1. map 자료구조를 생성하고 주어진 배열을 순회한다. 2. 배열을 순회하며 등장횟수를 카운팅한다. 3. 등장횟수가 2가 된 경우 map에서 자료를 지워버린다. 4. 남은 값의 key만 반환하면 끝 😑나의 풀이 var singleNumber = function(nums) { const map = new Map() for(let i = 0 ; i < nums.length; i++) { map.set(num..
⚡문제정보 https://leetcode.com/problems/deepest-leaves-sum/ Deepest Leaves Sum - LeetCode Can you solve this real interview question? Deepest Leaves Sum - Given the root of a binary tree, return the sum of values of its deepest leaves. Example 1: [https://assets.leetcode.com/uploads/2019/07/31/1483_ex1.png] Input: root = [1,2,3,4,5,null,6,7, leetcode.com 가장 깊은 잎의 값들을 반환하면 되는 문제입니다. 위 이진트리에서 가장 깊은 de..
😎간단한 문제입니다. 배열이 주어지고 그 배열에서 가장 많이 등장하는 값을 반환하면 되는 조건입니다. 키밸류쌍 자료구조를 통해 가장 등장횟수가 많은 키를 반환해주면 쉽게 풀 수 있겠네요 😎풀이 방법 var majorityElement = function(nums) { let map = new Map() let [answer,max] = [0,0] for(i=0 ; i max) { answer = nums[i] max = Math.max(map.get(nums[i]) , max) } } return answer }; map 자료구조에 등장횟수를 담아주고 만약 map에 담긴 nums[i]키의 밸류가 max 변수의 값보다 크다면 max 변수의 값과 answer를 업데이트해주면서 순회를 돌면 한번의 반복으로 요..
⚡문제정보 해쉬를 이용한것과 이용하지 않은것의 시간복잡도가 크게 차이나는 문제입니다. 첫번째 인덱스와 일치하는 값을 지워나가면서 [없앤 쌍 , 남은 숫자]를 반환하는게 조건입니다. 0 index를 그대로 구현하려고하면 배열을 실제로 조작해야하겠지만 저는 일치하는 쌍을 지워나갈거라면 값이 홀수로 남는 경우만 남겨주고 짝수인 경우에는 없앤 쌍을 카운트해주는 걸 통해 한번의 반복으로 답을 찾는 방법을 사용했습니다. 🔍나의 풀이 var numberOfPairs = function(nums) { let map = new Map() let answer = 0 for(i=0; i
⚡문제정보 문제는 다음과 같습니다. 숫자를 뒤집어서 비교해라(이때 0이 맨앞으로 오면 0은 사라져야함) 원본 숫자와 뒤집은 숫자를 중복없이 세어서 몇 종류가 되는지 리턴해라 set을 사용하면 간단할 것 같은데 숫자를 뒤집는게 조금 어려울 수 있겠네용 🔍접근방법 원본 배열을 set에 담아주고 뒤집은 숫자를 set에 add해주겠습니다. 🔍나의 풀이 var countDistinctIntegers = function(nums) { let set = new Set(nums) nums.forEach(e => { let a = Number(e.toString().split('').reverse().join('')) set.add(a) }) return set.size }; 1. set에 원본 배열을 담아준다. 2. ..
⚡문제정보 각 쌍의 값이 일치하게 짝지어준다음 그 쌍들을 곱한 값을 더해서 return 해주면 됩니다. 근데 만약 모든 쌍의 값을 일치하게 짝지어줄 수 없다면 -1을 반환해야합니다. 전 정렬을 통해서 가장 높은 값과 가장 낮은 값을 더해주는 방법으로 접근하며. 이 과정에서 두개의 포인터를 만들어주는 방법으로 해결했어요! 🔍나의 풀이 var dividePlayers = function(skill) { skill.sort((a,b) => a-b) let [left , right , equal] = [0, skill.length -1 , skill[0] + skill[skill.length-1]] let answer = 0 while(left
⚡문제정보 3개 이상 일정한 값이 나오는 경우 카운트를 올려주면 되는데 까다로운 점이 1,2,3,4같은 경우엔 [1,2,3,4]도 같이 카운트를 해줘야합니다. dp 유형 문제인걸 알고봐도 아직 능지가 부족해서 다른 분의 풀이를 참고했습니다. 🔍접근방법 [i-2] - [i-1] 과 [i-1] - [i]의 값이 같으면 문제의 요구조건에 맞는 케이스를 찾을 수 있을 것이다. 🔍참고한 풀이 var numberOfArithmeticSlices = function(nums) { let dp = new Array(nums.length).fill(0) let answer = 0 for(i=2 ; i 1 + 0 [1,2,3,4]같이 답이 3나와야하는 경우 이전 dp에서 1이 할당되었으니 1+1 -> 2 발상이 대단하네요..
⚡문제정보 예전에 코딩테스트 볼 때 같은 문제가 나온 적 있었는데 따흐흑 하면서 못풀었던 기억이 있는 문제입니다. 지금 생각해보면 easy일만 하네요 간단하게 생각해서 prices[i]와 이전 값들 중 최저값인 값을 비교하면서 prices[i]가 더 작은 값이라면 최저값으로 prices[i]를 넣어 갱신시켜주고 아니라면 팔았을때 얼마 이득인지 비교해주면서 max값을 집어넣어주면 될것입니다. 🔍나의 풀이 var maxProfit = function(prices) { let [answer,buy] = [0,Infinity] for(i=0 ; i prices[i]) { buy = prices[i] } else { answer = Math.max(answer , prices[i]-buy) } } return a..