고득적 Kit - 해시Level 2 - 전화번호 목록 이 문제가 해시인 건 아마도 주어진 데이터가 순서에 상관없이 가공되어 원하는 값을 반환하면 되는 것이라서,, 처음에는 이중 for문을 피하려고 forEach를 쓰고 if return으로 처리했는데forEach는 중간에 루프를 탈출할 수 없다고 한다..! 그래서 죽어도 false가 출력되지 않았던 것! 그걸 수정할 방법을 gpt로부터 some을 추천 받았다.근데 some 쓸 때 쓸데없이 조건식에 {} 넣었다가 헤맴,,중괄호 생략해야 한다! 아래는 수정본function solution(phone_book) { phone_book.sort((a,b) => a - b); for(let i = 0; i (idx > i) && (num..
프로그래머스
고득점 Kit - 해시Lv.1 폰켓몬최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.내 풀이function solution(nums) { const limit = nums.length / 2; let tmp = new Set(nums); let types = [...tmp].length; if (limit - 여기서 Set.length가 undefined로 반환되어서 배열로 바꿔주었는데, set에 size ..
Lv. 2 종이에 테스트 케이스들 정리해보면 규칙 찾을 수 있었을 것 같아 아쉬운 문제. - 숫자의 홀수인 약수 개수가 답이다. 이건 공식처럼 외워야 하는 수학 상식인 것이 아니라, 따지다 보면 그렇게 되는 경우. 프로그래머스 댓글에 원리 설명을 잘 해준 것이 있어서 가져왔다. - 15=1+2+3+4+5 (중간값 3) 3x5 / 15=4+5+6 (중간값 5) 5x3 / 15=7+8 (연속된 수) 7+8 - 홀수인 경우 무조건 가능. / 15=15 / 중간값이 3인 경우, 중간값이 5인 경우, 연속된 수(7, 8), 15(n) 해서 4개인데, 이게 공교롭게 홀수의 약수 수와 같다. - 짝수의 경우는 홀수의 연장선이라 n=30인 경우, 30의 약수는 1, 2, 3, 5, 6, 10, 15, 30. 30=4 ..
Lv. 2 문제 설명 정말정말... 너무 쉽게 풀 수 있는 문제인데 문제 제대로 안 읽었다가 하아안참을 헤맸다!😡 잘못된 부분이 없는 것 같다면 처음으로 돌아가서 문제를 다시 확인해보자!! 문자열 길이를 2진법 변환해야 하는데 나는 계속해서 문자열 자체를 2진법으로 변환해서 시간 초과가 떴다..ㅋ큐ㅠ 물론 삽질하다가 정규식보다 반복문(for)이 더 성능이 좋을 수 있다는 걸 알긴 했으니 아예 의미 없는 삽질은 아니었던 걸로..ㅎㅎ 0과 1로 이루어진 어떤 문자열 x를 가지고 1) 0을 모두 제거 2) 제거한 문자열의 길이를 2진법으로 표현한 문자열로 변환 3) 이걸 문자열이 "1"이 될 때까지 반복 4) 누적된 이진 변환 횟수와 마지막까지 제거된 모든 0의 개수를 반환 내 풀이 - 정규식 부분은 찾아봤다..
Lv.2 문제 괄호 '('와 ')'가 잘 쌍을 지어 나열되어 있는지 boolean을 반환해주는 문제. 쌍을 지어야 하며, )( 이런 순서는 안 됨. 내 풀이 function solution(s) { let total = 0; var answer = true; let sArray = Array.from(s); // (면 +1점, )면 -1점, 전부 계산해서 0점이 아니면 false 반환하기 for (i = 0; i < sArray.length; i++) { // )가 (보다 먼저 나오면 바로 false 반환 if (total === -1) { return false; } else if (sArray[i] === "(") { total += 1; } else { total -= 1; } } answer = ..
Lv.2 자연수가 들어있는 두 배열에서 요소 하나씩 꺼내 곱한 것의 최소 누적합을 반환. 따라서 두 배열을 내림차 혹은 오름차순으로 정렬하고 최소 곱들을 구해 더해주면 된다. 개인적으로 JS 배열 메서드와 특징을 까먹어서 헤맸던 문제.. 내 풀이 - JS에서는 배열 인덱스에 [-1]이 지원되지 않는다! 파이썬이랑 헷갈리지 말자!!😂 - pop()은 특정 인덱스를 매개변수로 받지 않고 오직 배열의 마지막 요소만 제거하고 나머지를 반환한다. - shift()도 오직 배열의 첫 요소만 제거하고 나머지 반환! - 특정 요소를 삭제하고 싶다면, splice()나 slice()를 사용하자. function solution(A, B) { let answer = 0; A.sort((a, b) => b - a); B.s..
문제 설명 각 부서가 신청한 금액을 바탕으로 전체 예산으로 최대 몇 부서까지 지원 가능한지 구하기. 한 부서에 지원할 때는 신청 금액에 딱 맞게만 지원 가능.(3만 원 신청했는데 천 원만 지원하는 거 안 됨) 접근 각 부서별 신청 금액 작은 순으로 정렬(최대한 많은 부서를 지원해야 하니까!) 작은 순서대로 합해서 예산 넘어가면 멈추고 부서 개수 반환. 관련 문법 sort()의 정렬 방식 compareFn - Optional A function that defines the sort order . The return value should be a number whose sign indicates the relative order of the two elements: negative if a is less..
문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 접근 n을 3진법으로 변환 앞뒤 뒤집어주기 10진법으로 다시 변환 관련 문법 JS에서 decimal to 다른 진수 변환 방법 숫자.toString() 숫자.toString(radix) 반대로 다른 진법 -> decimal 방법 parseInt(string) parseInt(string, radix) // parses a string argument and returns an integer of the specified radix(문자열 -> 숫자) parseInt 유의사항 - An integer parsed from the g..