728x90
반응형

전체 글 155

프로그래머스 - Level 2. 유사 칸토어 비트열 / JavaScript (js)

문제설명 문제분석 유사 칸토어 비트열을 생성하고, 해당 비트열의 l부터 r에 포함된 1의 갯수를 리턴하는 문제입니다. 최초 접근은 문제에서 요구한 대로 n-1번째의 "1"을 "11011"로, "0"을 "00000"으로 치환해 f(n)을 구해 slice(l-1, r)로 범위를 구하고 1을 카운트했습니다. 이해하기 쉽게 코드작성하기 function solution(n, l, r) { const similarContorBits = getSimilarCantorBits(n); return countOnes(similarContorBits.slice(l - 1, r)); } function getSimilarCantorBits(n) { let bits = "1"; if(n === 0) return bits; fo..

프로그래머스 - Level 2. 2개 이하로 다른 비트 / JavaScript (js)

문제설명 문제분석 먼저 문제를 있는 그대로 바라보면, 입력받은 numbers의 각 요소를 순회하면서, 각 요소를 2진법으로 표기했을 때 비트가 1~2개 다른 수를 찾아 그 수로 해당 요소를 업데이트하는 문제입니다. 문제를 해석했으니 코드를 작성해보겠습니다. 이해하기 쉽게 코드작성하기 다음 코드에는 주석이 없습니다. 주석을 굳이 달지 않은 이유는 해당 코드의 다음에 나옵니다. 다음의 코드를 이해하려는 분들을 위해 간단히 설명하면, 각 요소와 요소로부터 1씩 증가한 값을 각각 2진법으로 변환하고 memo에 기록해둡니다. 그리고 이 두 값을 getDiffFromBits 함수로 보냅니다. 이 함수는 비트로 구성된 두 숫자의 길이를 맞춰주고, 뒤에서부터 서로 다른 비트의 수를 카운트합니다. 이때 카운트가 3이되면..

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

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..

728x90
반응형