728x90
반응형

javascript 46

프로그래머스 - 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..

프로그래머스 - 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)

문제설명 문제분석 이 문제는 행렬의 곱을 알면 해결할 수 있는 문제입니다. 행렬의 곱을 실행하고 난 뒤의 결과물 총 크기는 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 ..

프로그래머스 - Level 2. 예상 대진표 / JavaScript (js)

문제설명 문제분석 이 문제는 대진표를 탐색하면서 A와 B가 만날 때까지 걸리는 라운드 수를 구하는 문제입니다. 대진표는 계속 반으로 나누어지므로, 이진 탐색(binary search)을 이용하여 해결할 수 있습니다. A와 B가 만날 때까지 걸리는 라운드 수를 계산할 때, A와 B가 같은 그룹에 속하는지를 판단하면 됩니다. 두 참가자의 번호를 비교해서 둘 중 작은 번호가 짝수이고, 큰 번호가 작은 번호보다 1 크다면 같은 그룹에 속하는 것으로 볼 수 있습니다. 이 경우에는 두 참가자는 다음 라운드에서 서로 만나게 됩니다. 이해하기 쉽게 코드작성하기 function solution(n,a,b) { let answer = 1; // 같은 그룹(또는 b 가 짝수이고, 남은 참가자가 1이 큰 경우)에 속하지 않으..

20230219

프로그래머스 스킬체크 Level 3 패스! 2월 19일 (일) Today I Learned 추천 알고리즘 관련하여 자문하던 일은 꾸준히 작성하여 어제 부로 잘 전달드렸다. 오늘은 프로그래머스 스킬체크 level 3를 달성했다. 아무래도 이제 level 2 문제를 풀고 설명할텐데 설명을 쉽게 하려면, 그보다 한 단계는 위에 있어야 할 거 같아서 공부를 좀 했다. 아, 링크드인 스킬 테스트도 JS와 nodejs 두 가지를 패스했다. Tomorrow I'll Learn 당분간은 내가 가진 역량을 잘 보여줄 수 있게, 이것저것 도전해봐야겠다. 당장 다음주를 위해 react hooks 부분과 js event loop를 준비해야 겠다.

Today I Learned 2023.02.19

프로그래머스 - Level 1. 키패드 누르기 / JavaScript (js)

문제설명 문제분석 이 문제는 모바일 키패드를 누르는 문제입니다. 정확히는 눌러야하는 번호에 따라 가까운 위치의 손을 기록하는 문제입니다. 왼쪽의 1, 4, 7은 왼손으로, 오른쪽의 3, 6, 9는 오른손으로 누르며, 가운데 2, 5, 8, 0은 두 손 중 가까운 손이 누릅니다. 이때 두 손의 거리가 같다면, 오른손잡이인지 왼손잡이인지에 따라 누르는 손이 결정됩니다. 거리는 키패드의 상하좌우를 한칸 이동할 때 1씩 증가하며, 가운데 번호를 누를 때에는 반드시 현재 손가락의 위치부터 눌러야하는 번호까지의 거리를 구해야 합니다. 따라서 현재 손가락의 위치를 기억하고 있어야 합니다. 문제가 조금 복잡한 관계로 풀어서 정리하겠습니다. 키패드는 가로 3, 세로 4로 정해져 있다. 키패드의 왼쪽 3개 숫자 1, 4,..

728x90
반응형