프로그래머스 - 두 정수 사이의 합
·
Algorithm
비도 추적추적 오고 발목도 다쳐 운동도 못하게 되며 심심한데 프로그래머스를 처음부터 풀어보자!라는 생각으로 문제를 풀게 되었습니다. 주어진 두 수(a, b)가 존재할 때, a부터 b까지의 합을 도출해 내야 하는 문제였습니다.이전에는 브루트 포스로 접근하여 해결했지만, 테스트 케이스가 추가되며 해결 방식이 달라졌는데요. 문제의 제한조건이 -10,000,000 ~ 10,000,000이었기 때문에반복문이나 재귀함수를 통한 접근은 성능 문제가 발생할 것으로 예상했습니다.예상대로 while문을 사용한 반복문으로는 테스트 케이스에서 실패가 발생했고 다른 방식으로문제 해결에 접근이 필요했어요. 개쩌는 공식 발견인 줄 알았는데 알고 보니 고등학교 때 배운 등차수열이었고ㅋㅋㅋ사실, 결론부터 말하자면 고등학교 때 배웠던 ..
LEETCODE 872. Leaf-Similar Trees
·
Algorithm
Tree 문제에 약하기도 하고 경험이 없어 쉬운 난이도부터풀이를 진행했어요. 문제 자체는 쉬웠지만 다른 분들의 코드를 보며 새로 배운 개념이 있어포스팅하게 되었습니다.문제 접근 root의 left와 right가 존재하지 않는 요소가 마지막 node이므로마지막 node라면 배열에 추가를 해준 후, root1의 node를 담는 배열과root2의 node를 담는 배열을 비교하면 될 것으로 예상되었습니다.나의 풀이 & 다른 풀이 첫 풀이 각 결과를 담는 배열들을 문자열로형변환을 통해 비교를 했는데요. 순서가 다를 시에도 true 값으로 결과가 발생하는 케이스가 존재해테스트 케이스에서 실패했습니다.var leafSimilar = function(root1, root2) { const arr1 = [], ar..
Leetcode 2570. Merge Two 2D Arrays by Summing Values
·
Algorithm
주어진 2개의 이차원 배열 내부의 요소인 배열의 [0]번째 값이 서로 같다면 더하고,다르다면 배열 요소를 그대로 추가하는 문제.첫번째 문제 접근처음엔 filter로 접근해 문제를 해결해보려고 했습니다.filter와 forEach를 사용해 배열의 [0]번째 값이 같은 케이스는 처리했지만값이 다른 케이스를 처리하지 못해 해당 코드를 폐기했습니다.// 처음 접근 코드/** * @param {number[][]} nums1 * @param {number[][]} nums2 * @return {number[][]} */ var mergeArrays = function(nums1, nums2) { const output= []; const c = nums1.filter(num1Arr => ..
Leetcode 2643. Row With Maximum Ones
·
Algorithm
1이 제일 많은 행과 1의 개수를 배열로 리턴하는 문제.1의 개수가 같은 행이 여러 개라면, 행 번호가 가장 작은 행을 선택해야 합니다.문제 접근행과 개수를 구하는 것이 목적이므로 해당 변수들에 값을 할당해 주면 됐습니다.1이 포함된 행을 찾기 위해 filter 메서드를 사용했고이전 배열의 1의 개수와 현재 배열의 1의 개수를 비교해개수가 동일하거나, 아니면 1을 더 많이 가지고 있는 배열을매번 비교를 통해 설정해 줄 필요가 있어 반복문을 사용했습니다.문제 해결/** * @param {number[][]} mat * @return {number[]} */var rowAndMaximumOnes = function(mat) { let count=0, row=0; for(let i=0; i ..
Leetcode 2843. Count Symmetric Integers
·
Algorithm
low와 high에서 대칭되는 값이 몇 개인지 구하는 문제였습니다.가장 먼저 고려했던 것은 대칭 유무를 어떻게 구분하는 것인가였는데요. example 2를 보며 유사성을 찾았습니다. Example 2:Input: low = 1200, high = 1230Output: 4Explanation: There are 4 symmetric integers between 1200 and 1230: 1203, 1212, 1221, and 1230. 숫자를 중간을 기준으로 나눠 왼쪽값과 오른쪽 값이라고 예를 들었을 때,왼쪽 값의 합과 오른쪽 값의 합은 같다는 특징이 있었어요.low부터 high의 수를 어떻게 나누고 값으로 산출해내느냐가 관건이었습니다.문제 접근1) 주어진 수의 범위가 넓어 for문을 사용하는 것이 맞는..
LEETCODE 1002. find-common-characters
·
Algorithm
문자열 배열이 주어지면 단어 내의 모든 문자열에 나타나는모든 문자의 배열을 반환하는 문제. Example 1:Input: words = ["cool","lock","cook"]Output: ["c","o"]문제 접근모든 문자열에 공통되는 단어라면 어떠한 문자열을 기준 삼아도 됐지만배열의 첫번째 문자열이 문제를 풀 때 편하겠다 싶어  첫 문자열을 변수에 할당했습니다. 두 번째로 요소마다 공통 문자를 찾아야 했는데요.의미 없이 반복문을 여러 번 사용해서 찾기보단 JS의 every라는 메서드를 사용해 처리했습니다.가독성도 좋고, 훨씬 효율적이니까요! 이후 공통 문자가 있다면 return 할 배열에 추가해 주는 것으로 해결하려고 했습니다만테스트를 통과하지 못했는데요.첫 번째 문자열에 공통 문자가 2개이고, 다른..
LEETCODE 2331. Evaluate Boolean Binary Tree
·
Algorithm
사실 설명만 보고선 이해가 안됐는데요.예제 문제 01번과 맨 아래의 부연 설명을 보고서야 어렴풋이 이해할 수 있었습니다.문제 접근 방법정확한지 아닌지는 솔직히 장담을 못한 채로 풀었습니다.root를 트리에 비교해보면 0 = False, 1 = True, 2 = OR, 3 = AND를 의미한다는 것을 파악했습니다. 문제를 분석해보면 2는 OR를 뜻하므로 왼쪽 node와 오른쪽 node 둘 중 하나만 있어도 되고,3일 때는 AND이므로 왼쪽 node와 오른쪽 node가 모두 있어야겠네요.최종 코드/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 :..
LEETCODE 824. Goat Latin
·
Algorithm
/** * @param {string} sentence * @return {string} */var toGoatLatin = function(sentence) { const arr = ['a', 'e', 'i', 'o', 'u']; const a = sentence.split(' '); return a.map((word, i) => arr.includes(word[0].toLowerCase()) ? [...word, 'ma', ...Array(i + 1).fill('a')].join('') : [...word.slice(1), word[0], 'ma', ...Array(i + 1).fill('a')].jo..