728x90
반응형

프로그래머스 38

프로그래머스 - 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. [1차] 뉴스 클러스터링 / JavaScript (js)

문제설명 문제분석 이 문제는 (1) 두 문자열을 입력받아 각 문자열에 대해 2글자씩 끊어서 집합을 만드는 문제와 (2) 두 집합의 교집합과 합집합의 길이를 구하고 자카드 유사도를 계산하는 문제로 구분할 수 있습니다. 각 문제별로 살펴보면 다음과 같습니다. 두 문자열을 입력받아 각 문자열에 대해 2글자씩 끊어서 집합을 만드는 문제 두 문자열이지만, 결국 하나의 함수를 작성해서 두 문자열에 대해 함수를 호출한다. 반복문을 돌면서 i번째 요소 + (i+1)번째 요소가 각각 문자인 경우, toLowerCase를 적용해 결과에 저장한다 반복문이 끝나면 결과를 리턴한다. 두 집합의 교집합과 합집합의 길이를 구하고 자카드 유사도를 계산하는 문제 두 집합(A, B)의 교집합을 구하기 위해서는 집합 A를 순회하며 집합 ..

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

문제설명 문제분석 입력 배열을 순차적으로 순회합니다. 이때 순회하는 요소를 기준으로 이 요소보다 값이 크고, 가장 가까운 요소의 값으로 현재 요소의 값을 업데이트합니다. 입력 배열을 순차적으로 탐색한다. 현재 인덱스의 요소를 기준으로, 이후에 나오는 배열의 요소 중 현재 요소보다 큰 값을 찾는다. 현재 요소보다 큰 값을 발견하면 해당 값으로 현재 요소를 업데이트한다. 현재 요소가 가장 큰 값인 경우 -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
반응형