본문 바로가기

전체 글87

[프로그래머스][자바스크립트][Level2] 큰 수 만들기 풀이 /** * 큰 수 만들기 * 탐욕법 * https://programmers.co.kr/learn/courses/30/lessons/42883?language=javascript */ function solution(number, k) { var answer = []; let i = 0, j = 0; while(i = number[j])) { answer.push(number[j]); j++; } else { answer.pop(); i++; } } return answer.join("") + number.slice(j); } 자릿수가 큰 숫자의 크기가 커질수록 전체 .. 2022. 1. 8.
[프로그래머스][자바스크립트][Level1] 문자열 내림차순으로 배치하기 1차 시도 - 성공 function solution(s) { return s.split("").sort((a, b) => b.charCodeAt(0) - a.charCodeAt(0)).join(""); } charCodeAt 으로 코드 번호를 비교해서 내림차순으로 정렬했다. 다른 풀이법 function solution(s) { return s.split("").sort().reverse().join(""); } 기본 sort 가 문자열의 유니코드 코드 포인트를 따라서 오름차순 정렬하므로 정렬 후 reverse 를 사용해 해결할 수 있다. 2022. 1. 6.
[프로그래머스][자바스크립트][Level1] 2016년 1차 시도 - 9번, 13번 케이스 실패 // 9번, 13번 테스트 케이스 실패 function solution(a, b) { var mon = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"]; const acc_mon = [0]; for (let i = 0; i < mon.length - 1; i++) { acc_mon.push(acc_mon[i] + mon[i]); } return day[((acc_mon[a - 1] + b) % 7) - 1]; } 테스트 및 분석 /** * 2016년.test.js */ const solution = require("... 2022. 1. 6.
[프로그래머스][자바스크립트][Level1] 두 개 뽑아서 더하기 /** * 두개뽑아서더하기.js * https://programmers.co.kr/learn/courses/30/lessons/68644?language=javascript */ // combination function solution(numbers) { const numSet = new Set(getCombinationsSum(numbers, 2)); return Array.from(numSet).sort((a, b) => a - b); } function getCombinationsSum(array, selectedNum) { const results = []; if (selectedNum === 1) { return [...array]; } array.forEach((fix, idx, orgArr.. 2022. 1. 6.
[Leetcode][자바스크립트][Easy] 88. Merge Sorted Array /** * 88_MergeSortedArray.js * Easy * https://leetcode.com/problems/merge-sorted-array/ * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-place instead. */ // built-in 사용 var merge1 = function(nums1, m, nums2, n) { nums1.splice(m); nums1.push(...nums2); nums1.sort((a, b) => a - b); // console.log({.. 2022. 1. 6.
[Leetcode][자바스크립트][Easy] 53. Maximum Subarray /** * 53_MaximumSubArray.js * Easy * https://leetcode.com/problems/maximum-subarray/ * maxSubArray3 참고: https://leetcode.com/problems/maximum-subarray/discuss/1595097/JAVA-or-Kadane * @param {number[]} nums * @return {number} */ // 완전 탐색 time exceeded var maxSubArray1 = function(nums) { let arr = [], max = -Infinity; nums.forEach((num) => { arr = arr.map((val) => val+num); arr.push(num); max = M.. 2022. 1. 5.
[Leetcode][자바스크립트][Easy] 217. Contains Duplicate /** * 217_ContainsDuplicate.js * Easy * https://leetcode.com/problems/contains-duplicate/ * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { const numHash = {}; for (let i = 0; i < nums.length; i++) { if (!numHash[nums[i]]) { numHash[nums[i]] = 1; } else { return true; } } return false; }; module.exports.containsDuplicate = containsDuplicate; 간단한 해시로 확인 /** .. 2022. 1. 5.
[프로그래머스][자바스크립트][Level1][카카오] 실패율 /** * 실패율.js * https://programmers.co.kr/learn/courses/30/lessons/42889 */ function solution(N, stages) { const stageReached = new Array(N+1).fill(0); stages.forEach((stage) => { for (let i = 0; i < stage; i++) { stageReached[i]++; } }); const stageFailed = []; for (let j = 0; j < stageReached.length - 1; j++) { const failureRate = (stageReached[j] - stageReached[j+1]) / (stageReached[j]); stage.. 2022. 1. 5.
[프로그래머스][자바스크립트][Level2] H-Index /** * H-index * 정렬 * https://programmers.co.kr/learn/courses/30/lessons/42747?language=javascript */ function solution(citations) { var answer = 0; citations.sort((a, b) => b - a); for (let i = 0; i = i + 1) { answer++; } else { break; } } return answer; } module.exports = solution; 내림차순으로 정리해놓고, 1보다 인용 수가 많은 논문이 1편 이상 있는지를 시작으로 2보다 인용수 많은 논문 2편 확인, 3.. 2022. 1. 4.
[프로그래머스][자바스크립트][Level2] 가장 큰 수 /** * 가장 큰 수 * 정렬 * https://programmers.co.kr/learn/courses/30/lessons/42746?language=javascript * */ export function solution(numbers) { const answer = numbers.map((num) => num.toString()).sort((a, b) => { const pre = parseInt(a + b); const post = parseInt(b + a); return post - pre; }).join(""); if (answer[0] === '0') return '0'; return answer; } console.log(solution([6, 10, 2])); console.log(s.. 2022. 1. 4.
[프로그래머스][자바스크립트][Level1] 없는 숫자 더하기 /** * 없는 숫자 더하기 * https://programmers.co.kr/learn/courses/30/lessons/86051?language=javascript */ function solution(numbers) { const numSet = new Set(numbers); let sum = 0; numSet.forEach((num) => sum+=num); return 45 - sum; } console.log(solution([1,2,3,4,6,7,8,0])); console.log(solution([5,8,4,0,6,7,9])); 문제에 겹치는 숫자가 없다고 주어져서 굳이 Set 을 사용할 필요는 없었다. 혹 숫자가 겹쳐서도 주어졌다면 Set 사용이 유의미했겠다. 2022. 1. 4.
[프로그래머스][자바스크립트][Level3] 베스트 앨범 /** * 베스트 앨범 * 해시 * https://programmers.co.kr/learn/courses/30/lessons/42579?language=javascript */ function solution(genres, plays) { let answer = []; const maxTotal = {}, maxGenre = {}; genres.forEach((genre, idx) => { !maxTotal[genre] ? maxTotal[genre] = plays[idx] : maxTotal[genre] += plays[idx]; !maxGenre[genre] ? maxGenre[genre] = [{value: plays[idx], index: idx}] : maxGenre[genre].push({v.. 2022. 1. 4.
[프로그래머스][자바스크립트][Level2] 다리를 지나는 트럭 /** * 다리를 지나는 트럭 * Queue * https://programmers.co.kr/learn/courses/30/lessons/42583 */ class Node { constructor(value){ this.value = value; this.next = null; } } class Queue { constructor(){ this.first = null; this.last = null; this.size = 0; } enqueue(val){ var newNode = new Node(val); if(!this.first){ this.first = newNode; this.last = newNode; } else { this.last.next = newNode; this.last = new.. 2022. 1. 3.
[프로그래머스][자바스크립트][Level2] 프린터 /** * Queue */ class Node { constructor(value){ this.value = value; this.next = null; } } class Queue { constructor(){ this.first = null; this.last = null; this.size = 0; } enqueue(val){ var newNode = new Node(val); if(!this.first){ this.first = newNode; this.last = newNode; } else { this.last.next = newNode; this.last = newNode; } return ++this.size; } dequeue(){ if(!this.first) return null; va.. 2022. 1. 3.
[프로그래머스][자바스크립트][Level2] 소수 찾기 /** * 소수 찾기 * 완전 탐색 * https://programmers.co.kr/learn/courses/30/lessons/42839?language=javascript */ function solution(numbers) { var answer = 0, combination = [], numSet = new Set([]); const nums = numbers.split(""); for (let i = 1; i { getPermutations(comb).forEach((permutation) => { numSet.add(parseInt(permutation.join(""))) }); }); numSet.forEach((num) => { if (primeNumberChecker(parseInt(n.. 2022. 1. 3.
[프로그래머스][자바스크립트][Level1] 모의고사 /** * 모의고사 * 완전탐색 */ function solution(answers) { const supoja = [0, 0, 0]; const supojaPattern = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]; answers.forEach((val, idx) => { for (let i = 0; i < supojaPattern.length; i++) { if (val === supojaPattern[i][idx%supojaPattern[i].length]) supoja[i]++; } }); const max = Math.max(...supoja); return supoja.reduce((rst, matc.. 2022. 1. 3.
[프로그래머스][자바스크립트][Level2] 카펫 /** * 카펫 - 완전 탐색 * https://programmers.co.kr/learn/courses/30/lessons/42842?language=javascript * 가로 >= 세로 */ /** 1 */ function solution(brown, yellow) { const area = brown + yellow; for (let i = 1; i 2022. 1. 3.
[프로그래머스][자바스크립트][Level1][카카오] 숫자 문자열과 영단어 /** * 숫자 문자열과 영단어 * https://programmers.co.kr/learn/courses/30/lessons/81301?language=javascript */ function solution(s) { var answer = [], str = ""; for (let i = 0; i < s.length; i++) { const numChar = parseInt(s[i]); if (isNaN(numChar)) { str += s[i]; const changedNum = changeStringToInt(str); if (changedNum !== null) { answer.push(changedNum); str = ""; } } else { answer.push(numChar); } } re.. 2022. 1. 2.