본문 바로가기

전체 글87

[Leetcode][자바스크립트][Easy] 141. Linked List Cycle 풀이1 /** * 141_LinkedListCycle.js * Easy * https://leetcode.com/problems/linked-list-cycle/ */ const nodeArr = []; var hasCycle = function(head) { if (head === null || head.next === null) return false; if (nodeArr.indexOf(head.next) > -1) return true; nodeArr.push(head.next); return hasCycle(head.next); }; 문제 예시에서 input 이 배열로 주어지는 것처럼 나타나서 처음에 좀 헷갈렸다. hasCycle 함수 자체를 재귀로 놓고 돌렸는데 그 결과로 nodeArr 배열이.. 2022. 1. 11.
[프로그래머스][자바스크립트][Level2] 위장 풀이 /** * 위장.js * Level2 * https://programmers.co.kr/learn/courses/30/lessons/42578?language=javascript */ function solution(clothes) { const clothesMap = {}; clothes.forEach((cloth) => { if (!clothesMap[cloth[1]]) { clothesMap[cloth[1]] = 1; } else { clothesMap[cloth[1]]++; } }); return Object.keys(clothesMap).reduce((answer, key) => { answer *= clothesMap[key] + 1; return answer; }, 1) - 1; } 옷.. 2022. 1. 10.
[Leetcode][자바스크립트][Medium] 36. Valid Sudoku 풀이 /** * 36_ValidSudoku.js * Medium * https://leetcode.com/problems/valid-sudoku/ */ var isValidSudoku = function(board) { const row = new Array(9).fill(null).map(() => new Set([])), col = new Array(9).fill(null).map(() => new Set([])), box = new Array(9).fill(null).map(() => new Set([])); for (let i = 0; i < 9; i++) { for (let j = 0; j < 9; j++) { if (board[i][j] !== ".") { if (row[i].has(board.. 2022. 1. 10.
[Leetcode][자바스크립트][Easy] 242. Valid Anagram 풀이 /** * 242_ValidAnagram.js * Easy * https://leetcode.com/problems/valid-anagram/ */ var isAnagram = function(s, t) { if (s.length !== t.length) return false; const sSorted = s.split("").sort().join(""); const tSorted = t.split("").sort().join(""); return sSorted === tSorted; }; anagram 을 구하는 문제로 주어진 두 string의 모든 char 의 종류와 개수가 동일해야한다. 결국 동일한 방식으로 정렬했을 때 동일한 값이어야한다. 2022. 1. 10.
[Leetcode][자바스크립트][Easy] 383. Ransom Note 풀이 /** * 383_RansomNote.js * Easy * https://leetcode.com/problems/ransom-note/ */ var canConstruct = function(ransomNote, magazine) { const mHash = {}; magazine.split("").forEach((char) => { if (!mHash[char]) { mHash[char] = 1; } else { mHash[char]++; } }); for (let i = 0; i < ransomNote.length; i++) { if (!mHash[ransomNote[i]]) return false; mHash[ransomNote[i]]--; } return true; }; ransomNote .. 2022. 1. 10.
[Leetcode][자바스크립트][Easy] 387. First Unique Character in a String 풀이 /** * 387_FirstUniqueCharacterInAString.js * Easy * https://leetcode.com/problems/first-unique-character-in-a-string/ */ var firstUniqChar = function(s) { const strHash = {}; const sArr = s.split(""); sArr.forEach((char) => { if (!strHash[char]) { strHash[char] = 1; } else { strHash[char]++; } }); for (let i = 0; i < sArr.length; i++) { if (strHash[sArr[i]] === 1) return i; } return -1; }; 해시.. 2022. 1. 10.
[Leetcode][자바스크립트][Easy] 566. Reshape the Matrix 풀이1 /** * 566_ReshapeTheMatrix.js * Easy * https://leetcode.com/problems/reshape-the-matrix/ */ var matrixReshape = function(mat, r, c) { if (mat[0].length * mat.length !== r * c) return mat; let temp = []; mat.forEach((subArr) => temp = temp.concat(subArr)); const answer = [[]]; temp.forEach((val) => { if (answer[answer.length - 1].length === c) answer.push([]); answer[answer.length - 1].push(v.. 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 최소 직사각형 풀이 /** * 최소직사각형.js * Level1 * https://programmers.co.kr/learn/courses/30/lessons/86491 */ function solution(sizes) { var maxOfMax = 0, maxOfMin = 0; sizes.forEach((size) => { maxOfMax = Math.max(maxOfMax, Math.max(...size)); maxOfMin = Math.max(maxOfMin, Math.min(...size)); }); return maxOfMax * maxOfMin; } 가로/세로 중 큰 것 중에 가장 큰 것(maxOfMax), 가로/세로 중 작은 것 중에 가장 큰 것(maxOfMin)을 기준으로 지갑을 만들면 해결된다. 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 약수의 개수와 덧셈 풀이 /** * 약수의개수와덧셈.js * Level1 * https://programmers.co.kr/learn/courses/30/lessons/77884 */ function solution(left, right) { var answer = 0; for (let i = left; i 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 나누어 떨어지는 숫자 배열 풀이 /** * 나누어떨어지는숫자배열 * Level1 * https://programmers.co.kr/learn/courses/30/lessons/12910 */ function solution(arr, divisor) { const answer = arr.filter((num) => num % divisor === 0).sort((a, b) => a - b); if (answer.length === 0) return [-1]; return answer; } 나누어 떨어지는 수를 % 연산자로 확인하고 오름차순으로 정렬해서 return 한다. answer에 아무 값도 없을 경우 -1 을 담은 배열을 return 하는 케이스를 처리해준다. 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 같은 숫자는 싫어 풀이 /** * 같은숫자는싫어.js * Level1 * https://programmers.co.kr/learn/courses/30/lessons/12906 */ function solution(arr) { var answer = []; arr.forEach((num ,idx, orgArr) => { if (num !== orgArr[idx + 1]) answer.push(num); }); return answer; } 연속적으로 나타나는 숫자들 중에 바로 다음 인덱스 숫자가 다른 값인 경우, 즉 연속된 수 중 가장 마지막 숫자만 answer 에 넣어주는 방식으로 해결했다. 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 두 정수 사이의 합 풀이 /** * 두정수사이의합.js * Level1 * https://programmers.co.kr/learn/courses/30/lessons/12912 */ function solution(a, b) { if (a === b) return a; const min = Math.min(a, b) - 1, max = Math.max(a, b); return ((max * (max + 1))/2) - ((min *(min + 1))/2); } 간단하게 가우스의 합 정리를 활용해서 해결했다. 시각화 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 나머지가 1이 되는 수 찾기 풀이 /** * 나머지가1이되는수찾기.js * https://programmers.co.kr/learn/courses/30/lessons/87389 */ function solution(n) { for (let i = 2; i < n; i++) { if (n % i === 1) return i; } } 나머지가 1인 수를 찾아서 return 한다. 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 가운데 글자 가져오기 풀이 /** * 가운데글자가져오기.js * https://programmers.co.kr/learn/courses/30/lessons/12903?language=javascript */ function solution(s) { let answer = ''; const len = s.length; if (len % 2 === 0) { answer += s[len/2 -1]; answer += s[len/2]; } else { answer += s[Math.floor(len/2)]; } return answer; } 짝수면 가운데 2글자를, 홀수면 가운데 1글자를 return 한다. 2022. 1. 9.
[프로그래머스][자바스크립트][Level1] 서울에서 김서방 찾기 풀이 - indexOf 활용 /** * 서울에서김서방찾기.js * https://programmers.co.kr/learn/courses/30/lessons/12919 */ function solution(seoul) { return `김서방은 ${seoul.indexOf("Kim")}에 있다`; } 풀이2 - findIndex 활용 /** * 서울에서김서방찾기.js * https://programmers.co.kr/learn/courses/30/lessons/12919 */ function solution(seoul) { return `김서방은 ${seoul.findIndex((el) => el === "Kim")}에 있다`; } 2022. 1. 9.
[Leetcode][자바스크립트][Easy] 121. Best Time to Buy and Sell Stock 풀이 /** * 121_BestTimeToBuyAndSellStock.js * Easy * https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ */ var maxProfit = function(prices) { let currMin = prices[0], currMax = 0, _maxProfit = 0; prices.forEach((price) => { if (price > currMax) { currMax = price; _maxProfit = Math.max(_maxProfit, currMax - currMin); } if (price currMin) _maxProfit = Math.max(.. 2022. 1. 8.
[Leetcode][자바스크립트][Easy] 350. Intersection of Two Arrays II 풀이1 /** * 350_IntersectionOfTwoArraysII.js * Easy * https://leetcode.com/problems/intersection-of-two-arrays-ii/ */ var intersect = function(nums1, nums2) { const answer = [], idxHash = {}; nums1.forEach((num) => { const idx = idxHash[num] === undefined ? nums2.indexOf(num) : nums2.indexOf(num, idxHash[num] + 1); if (idx > -1) { idxHash[num] = idx; answer.push(num); } }); return answer; }; 교집합을 .. 2022. 1. 8.
[프로그래머스][자바스크립트][Level2] 구명보트 풀이 /** * 구명보트 * 탐욕법 * https://programmers.co.kr/learn/courses/30/lessons/42885?language=javascript */ function solution(people, limit) { let answer = 0, idx1 = 0, idx2 = people.length - 1; people.sort((a, b) => a - b); while (idx1 limit) { answer++; idx2--; } else { answer++; idx1++; idx2--; } } return answer; } 가장 가벼운 사람을 고정해놓고 가장 무거운 사람부터 내려오면서 가벼운 사람 + 무거운 사람 or 무거운 사람 only 로 나눠서 보트를 태우는 방식이다. 2022. 1. 8.