본문 바로가기

Web development131

[프로그래머스] 부족한 금액 계산하기 (javascript) 탈때마다 첫 이용료의 n배가 되는 놀이기구를 count번 탔을 때 얼마가 모자라는지 리턴하는 문제 가우스 공식을 이용하면 된다. 주의할 점은 돈이 충분하다면 0을 리턴해야 한다. function solution(price, money, count) { // price *1 + price *2 + ... price*count // price(1+2+3+...count) // count *(count + 1)/2 * count const budget = count*(count+1)/2 * price; return budget>money ? budget - money : 0; } 풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/82612 2021. 8. 20.
[LeetCode] 55. Jump Game (javascript) 주어진 배열이 있다. 인덱스 0에서 시작하는데, 요소의 숫자만큼 점프를 할 수 있다.(더 짧게 뛰어도 된다.) 이때, 배열의 끝까지 갈 수 있는지 검사하는 문제이다. Input: nums = [2,3,1,1,4] Output: true nums[0]=2에서 두칸, nums[2]=1에서 한칸, nums[3]=1에서 한칸 가면 도착한다. nums[0]=2에서 한칸, nums[1]=3에서 세칸 가면 도착한다. Input: nums = [3,2,1,0,4] Output: false nums[0]=3에서 세칸을 가도, nums[1]=2에서 두칸을 가도, nums[2]=1에서 한칸을 가도 마지막 요소에 도달할 수 없다. 그러므로 false이다. 이 문제를 접했을 때... DFS로 풀어야 하나? 아니면 브루트포스??.. 2021. 8. 20.
[프로그래머스] N으로 표현 주어진 N을 최대한 적게 사용하여 사칙연산(+, -, *, /)으로 목표하는 number를 만들고, 최소 몇개가 필요한지 구하는 문제이다. 유의할 점은 N=5인 경우 두 개를 사용하면 55로도 만들 수 있지만, 그렇다고 N=5 number=105일때 (5 + 5) = 10 10 + "5" = 105 이렇게는 할 수 없다는 점이다. 이미 사칙연산된 숫자에는 N을 붙일 수 없고, 사칙연산할 원소로만 사용해야 한다. function solution(N, number) { var answer = 0; if(N == number) return 1; // 5 // 55 5+5 5-5 5/5 5*5 // [55 0 10 1 25] // 55 + 사칙연산 // 555, [55 0 10 1 25]* 사칙연산 // 주어진.. 2021. 8. 12.
[프로그래머스] 해시/위장 옷장에서 옷을 꺼내 입되 같은 부위에는 하나의 옷만 입을 수 있다. 빨간 티셔츠, 파란 티셔츠, 검은 모자 => [빨간 티셔츠만, 파란 티셔츠만, 검은 모자만, 빨간 티셔츠와 검은 모자, 파란 티셔츠와 검은 모자] 옷장 안에서 부위별로 옷을 분류한 후, => 모자: 3개, 티셔츠: 2개 ... 한 부위만 입는 경우 => 모자만, 티셔츠만, ... 두 부위만 입는 경우, => 모자와 티셔츠, 모자와 신발, 티셔츠와 신발 ... ... 로 조합으로 경우의 수를 구하면 된다. function solution(clothes) { const count = clothes.length; if(count < 1) return 0; const closet = {}; for(let c of clothes) { if(clo.. 2021. 8. 12.
[LeetCode] 198. House Robber (javascript) 도둑이 도둑질을 하는데 이웃한 두 집을 연속으로 털면 경찰에 잡힌다. 연속으로 털지 않으면서 가장 많은 돈을 털 수 있도록 하는 문제이다. /** * @param {number[]} nums * @return {number} */ var rob = function(nums) { let prev = 0; let cur = 0; let temp; for(let i of nums) { temp = cur; // temp = 0 // temp = 1 // temp = 2 // temp = 4 cur = Math.max(i+prev, cur); // cur = Math.max(1 + 0, 0) // cur = max(2+0, 1)// cur = max(3+1,2) prev = temp;// prev = 0 // .. 2021. 8. 12.
[LeetCode] 118. Pascal's Triangle (javascript) 피보나치와 살짝 유사한 문제이다. 각 배열의 처음과 끝에 1을 넣어주고, 더한 값들을 추가해주면 되는 간단한 문제이다. /** * @param {number} numRows * @return {number[][]} */ var generate = function(numRows) { if(numRows == 1) return [[1]]; if(numRows==2) return [[1], [1, 1]]; let result = [[1], [1,1]]; for(let i = 2; i < numRows; i++){ const arr = [1]; const prev = result[i-1]; const len = prev.length; for(let j = 0; j 2021. 8. 12.
[프로그래머스] 뉴스 클러스터링 (javascript) 주어진 두개의 문자열에 대해 자카드 유사도를 리턴하는 문제이다. 자카드 유사도란 문자열을 2개씩 나누어 쪼개고 france => fr, ra, an, nc, ce, french => fr, re, en, nc, ch 합집합과 교집합의 원소 갯수를 구해 나눈 것이다. insersection => {fr, nc} union => {fr, ra, an, nc, ce, re, en, ch} 2/8 = 0.25 유의할 점이 있는데 1. 여기서 합집합과 교집합을 구할 때, 중복을 허용하는 집합이라는 점에 유의해야 한다. 예를들어 aaaa, aaa가 주어졌다면 => [aa, aa, aa] [aa, aa] 중복을 허용하지 않는다면 교집합은 [aa]가 되겠지만, 이 문제의 경우 중복을 허용하기 때문에 [aa, aa]가 .. 2021. 8. 12.
[토비의 스프링] 오브젝트와 의존관계 보호되어 있는 글 입니다. 2021. 7. 23.
[LeetCode] Minimum Path Sum (javascript) 좌상단에서 출발하여 우하단까지 오른쪽, 아래로만 움직여 도착해야 한다. 가는 경로의 숫자를 모두 더했을때, 가장 작은 숫자를 구하는 문제다. 최단경로 경우의 수 문제와 유사하게 풀 수 있다. 처음엔 모든 경로를 처음부터 더해가면서 최솟값을 구해보려고 했으나.. (첫번째 경로 결과 : 10, 두번째 경로 결과 : 8 ...) Time Limit에 걸렸다. 이미 구해놓은 결과값보다 큰 경우 패스하도록 해도 마찬가지... 더보기 틀린 풀이 // 잘못된 접근방식(Time Limit) var minPathSum = function (grid) { let result = Infinity; const ml = grid.length - 1; const nl = grid[0].length -1; console.log(m.. 2021. 6. 22.