프로그래머스의 피보나치 수를 해결하며 알찬 주말을 보내보자.
·
Algorithm
회사에서 Jira 티켓 점수를 할당할 때 피보나치 수를 사용해 점수를 매기고 있던 찰나,오랜만에 알고리즘을 풀어보고 싶어서 2 레벨 중 가장 만만해 보이는 문제인 피보나치 수를 골라 풀어봤다. 피보나치 수(열)는 n-1번째 수와 n-2번째 수를 사용해 현재의 수를 도출해 내는 특성이 있다는 것을이미 알고 있었다. 해당 특징을 이용해 문제에 접근하면 쉽게 풀 수 있을 거라고 예상을 했고! 1️⃣ 그래서 제출한 첫 번째 답안function solution(n) { let fibonacciArray = [0,1]; for(let i=2; i 우선 가장 기본적인 for문으로 해결 가능한지 궁금했고, 결과는 실패였다. 2️⃣ 뭐가 문제였을까?n이 내 예상보다 훨씬 높을 때를 염두에 두질 않았다.보기에서..
기차 티켓 대기열은 어떤 구조일까(feat.Queue)
·
그날의 배움
24년 추석, 용산으로 돌아오기 위해기차 티켓 예매를 계-속 시도했는데요.(실패하고 버스를 타고 왔습니다.. 티켓팅 힘들더라고요) 기차 티켓 예매를 위한 대기열은 어떻게 구성이 되었을지와대기열과 비슷한 구조를 자바스크립트로 구현하면 어떨까라는생각이 문득 들어 포스팅하게 되었습니다.먼저 진입한 사람이 티켓 화면에 빨리 진입할 수 있다. (FIFO)대기열을 분석해 보면 대기열 화면의 로딩이나, 순위가 빠른 사람이먼저 예매 화면으로 접근할 수 있는 것은 모두 알고 계실 거예요.자료 구조로 비교하자면 Queue가 사용되었겠다 싶었습니다. Queue는 FIFO(First In, First Out) 방식으로 동작하며먼저 들어온 요청이 먼저 처리된다는 의미를 지니고 있으니까요. 대기열에 먼저 진입하는 것을 Enque..
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..