728x90
반응형

js 41

프로그래머스 - Level 2. k진수에서 소수 개수 구하기 / JavaScript (js)

문제설명 문제분석 이 문제는 (1) 입력값 n을 k진수로 변환해서 조건에 맞는 정수를 얻는 문제와 (2) 각 정수들이 소수인지 판별하여 길이를 리턴하는 문제로 나눌 수 있습니다. 간단한 문제이니 바로 코드를 작성해보겠습니다. 이해하기 쉽게 코드작성하기 function solution(n, k) { const numbersAfterConvertToBaseK = Number(n).toString(k).split("0"); return numbersAfterConvertToBaseK.filter(x => isPrimeForStrNum(x)).length; } function isPrimeForStrNum(strNum) { if( strNum === "" || strNum === "1" || strNum.inc..

프로그래머스 - Level 2. 스킬트리 / JavaScript (js)

문제설명 문제분석 - 수도코드 이 문제는 skill_trees를 순회하며 skill의 조건에 부합하는 요소를 필터링한 길이를 찾는 문제입니다. 따라서 solution 함수는 다음과 같이 간단하게 작성할 수 있습니다. function solution(skill, skill_trees) { return skill_trees.filter(x => isPossible(skill, x)).length; } 이제 isPossible 함수를 통해 skill_trees의 요소와 skill을 비교해 가능한 스킬트리인지 아닌지 리턴하면 됩니다. 이해하기 쉽게 코드작성하기 function solution(skill, skill_trees) { return skill_trees.filter(x => isPossible(ski..

230228

몇가지 진행상황 업데이트 겸 글을 남김 2월 28일 (화) Today I Learned 오늘 그간 자문하던 TIPS 지원사업에 제출을 완료했다는 연락을 받았다. 좋은 성과를 거두어서 보람찬 기분을 만끽할 수 있었으면 좋겠다. 엘리스코딩에서 한달간 이론 코치로 활동하게 되었다. HTML/CSS/JavaScript 기초, DOM, git 등 기초적인 내용을 실시간으로 강의하게 되는데, 이력이 있어도 하나라도 더 알려드리려고 준비를 열심히 하고 있다. 질문이 많으면 재밌기도 하다. 그래도 나는 여전히 개발하는 게 더 재밌나보다. 지금 몇 가지 아이디어를 주섬주섬 꺼내어놓고, 프로젝트 겸 개발을 진행해보고 있다. 여전히 부족한 게 많다는 걸 여실히 느끼는 중이다. 그래도 배울 게 많아서 여전히 좋다 ㅎ Tomo..

Today I Learned 2023.02.28

프로그래머스 - Level 2. [1차] 캐시 / JavaScript (js)

문제설명 문제분석 이 문제의 조건에 나타나있듯이 캐시 교체 알고리즘은 LRU(Least Recently Used) 알고리즘을 사용합니다. LRU 알고리즘은 캐시를 확인하면서, 오랫동안 사용되지 않은 페이지(이 문제에서는 도시 이름)를 삭제하고, 최근에 사용된 페이지를 추가하는 알고리즘입니다. 삭제와 추가를 효율적으로 진행해야하기때문에, 객체를 사용하여 구현하는 것이 가장 효율적입니다. 도시이름 배열을 순회하면서, 객체에 존재하면 5를 추가, 존재하지 않으면 1을 추가합니다. 객체에 존재하는 도시이름의 수가 캐시 사이즈보다 크면, 가장 오래된 키-값 페어를 제거합니다. 문제를 단순화 했으니 이해하기 쉽게 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 function solution(cacheSize, c..

프로그래머스 - Level 2. 할인 행사 / JavaScript (js)

문제설명 문제분석 이 문제는 입력으로 주어진 discount를 10개씩 끊어 순회하며, want의 모든 항목을 구매할 수 있는 날짜가 언제언제인지 날짜의 일수를 구하는 문제입니다. discount를 10개씩 순회한다. want 배열에 담긴 속성이고, 해당 항목을 number에서 제거하지 않았다면 number에서 해당 항목을 -1 한다. 카운트를 +1 한다. count가 10이면 answer에 1을 더한다 문제를 단순화 했으니 이해하기 쉽게 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 function solution(want, number, discount) { let numbers = []; let answer = 0, count = 0; for(let i = 0; i 0) { numbers[idx]..

프로그래머스 - Level 2. 튜플 / JavaScript (js)

문제설명 문제분석 이 문제는 입력값 s의 집합을 배열로 변환하고, 각 배열의 길이를 기준으로 오름차순 정렬한 다음, 리턴 배열(answer)에 포함되지 않은 요소를 추가하는 형태로 해결하면 됩니다. 먼저 s의 집합을 배열로 변환한다. 배열의 길이를 기준으로 오름차순 정렬한다. 리턴 배열에 포함되지 않은 요소를 순차적으로 추가한다. 그럼 코드를 작성해보겠습니다. 이해하기 쉽게 코드작성하기 function solution(s) { const memo = {}; let tmp = ""; // 문자열 s를 순회하며 하나의 서브셋 내부에 있는 모든 요소를 tmp에 추가 // 서브셋이 종료되면 tmp를 배열로 변환하고, 그 길이를 key로 객체에 배열을 저장 for(let i = 1; i < s.length - 1..

프로그래머스 - Level 2. 귤 고르기 / JavaScript (js)

문제설명 문제분석 이 문제는 입력값으로 주어진 tangerine에 포함된 요소의 갯수를 카운트하고, 큰 카운트들의 합이 k 이상이 될 때, 이 카운트의 갯수를 리턴하는 문제입니다. 조금 복잡해보이니 정리하자면 다음과 같습니다. tangerine에서 각 요소를 순회한다. 이때 각 요소의 값이 몇 번 등장했는지 카운트한다. 각 요소의 값 중 큰 값을 기준으로 정렬한다. k에서 큰 값을 차례대로 빼주면서 k가 0보다 작거나 같게 만든다. 이때 값을 빼줄 때마다 리턴할 값을 1씩 증가한다. 이해하기 쉽게 코드작성하기 function solution(k, tangerine) { const countObj = {}; let count = 0; let prev = -1; // 귤을 크기별로 정렬 tangerine.s..

프로그래머스 - Level 2. 점프와 순간 이동 / JavaScript (js)

문제설명 문제분석 해당 문제는 주어진 거리 N을 0에서부터 순간이동과 점프를 이용하여 이동하며, 건전지 사용량이 최소가 되도록 하는 문제입니다. 순간이동은 현재까지 이동한 거리의 2배 만큼 거리를 이동하므로, 현재 위치를 2로 나누면서 이동하면서 필요한 점프 횟수를 계산하여 건전지 사용량을 구하면 됩니다. 이를 위해 아래와 같이 접근할 수 있습니다. 현재 위치를 나타내는 변수를 0으로 초기화합니다. N이 0이 될 때까지 while 루프를 돌며 다음을 수행합니다. 현재 위치가 짝수일 경우, 순간이동을 이용하여 이동합니다. 이때 건전지 사용량은 변하지 않습니다. 현재 위치가 홀수일 경우, 점프를 이용하여 한 칸 이동합니다. 이때 건전지 사용량은 1 증가합니다. 현재 위치를 2로 나눕니다. 현재까지의 건전지 ..

프로그래머스 - Level 2. 뒤에 있는 큰 수 찾기 / JavaScript (js)

문제설명 문제분석 입력 배열을 순차적으로 순회합니다. 이때 순회하는 요소를 기준으로 이 요소보다 값이 크고, 가장 가까운 요소의 값으로 현재 요소의 값을 업데이트합니다. 입력 배열을 순차적으로 탐색한다. 현재 인덱스의 요소를 기준으로, 이후에 나오는 배열의 요소 중 현재 요소보다 큰 값을 찾는다. 현재 요소보다 큰 값을 발견하면 해당 값으로 현재 요소를 업데이트한다. 현재 요소가 가장 큰 값인 경우 -1로 업데이트 한다. 문제를 단순화 했으니 이해하기 쉽게 코드를 짜보겠습니다. 이해하기 쉽게 코드작성하기 function solution(numbers) { // 모든 요소를 순회하며 업데이트 return numbers.map((x, i) => { const remains = numbers.slice(i +..

프로그래머스 - Level 2. 행렬의 곱셈 / JavaScript (js)

문제설명 문제분석 이 문제는 행렬의 곱을 알면 해결할 수 있는 문제입니다. 행렬의 곱을 실행하고 난 뒤의 결과물 총 크기는 arr1의 row 갯수, arr2의 col 갯수로 이루어진 2차원 배열(행렬)입니다. 뿐만 아니라 행렬의 곱은 다음과 같은 순서로 이루어져 각 요소별로 곱셈과 덧셈이 이뤄지게 됩니다. 조금더 복잡하지만 명확하게 각 요소별 값을 구하면 다음과 같습니다. 각 요소에 대해 a_ik와 b_kj의 스칼라 곱의 총 합을 구하면 됩니다. 이해하기 쉽게 코드작성하기 function solution(arr1, arr2) { const answer = new Array(arr1.length).fill().map(() => new Array(arr2[0].length).fill(0)); for(let ..

728x90
반응형