프로그래머스 의상
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42578#문제 풀이1. 각 의상 종류별 선택 가능한 경우의 수 구하기ex: [모자 : 2, 상의 : 1]일 경우 각 종류에서 선택할 수 있는 경우의 수모자 : 2개 중 하나를 선택 or 선택 안함 -> 2 + 1 = 3 가지상의 : 1개 중 하나를 선택 or 선택 안함 -> 1 + 1 = 2 가지2. 전체 조합 계산 1번에서 구한 각 종류에서의 경우의 수의 배열은 [3, 2]로 해당 배열 값을 모두 곱하면 모든 경우의 수가 나옴즉, 3 * 2 = 6가지 종류가 존재함3. 공집합 제외문제에서 하나 이상의 의상을 입어야한다는 조건이 있으므로 공집합, 즉 아무것도 선택안한 경우는 제외해야 함2번에..
프로그래머스 폰켓몬
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/1845문제 풀이폰켓몬의 종류와 갯수를 dict 형태로 관리하도록 변환answer는 nums 배열의 길이 / 2 만큼의 폰켓몬을 가질 수 있음dict으로 변환한 keys의 종류가 answer보다 작다면 선택할 수 있는 폰켓몬이 더 적다는 의미로 answer에 keys의 길이를 저장해주면 됨-> 문제를 해결하고 깨달은 사실...어차피 dict의 keys의 갯수만 파악할거면 dict형태가 아니 배열을 set배열로 만들어서 .size를 이용해 단순히 set배열의 길이를 파악하면 쉽게 해결할 수 있음// dict을 이용할 경우function solution(nums) { let answer = ..
프로그래머스 H-Index
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42747#문제 풀이H-index의 크기를 이분 탐색을 이용해 구하는 방식으로 접근valid_h_index 함수 : mid(h-index)가 주어졌을 때 citations 배열에서 mid보다 큰 수의 갯수가 mid보다 많을 경우 해당 값은 H-index로 사용가능가능하다면 answer를 더 큰 값으로 교체해주고 값을 증가시켜 검사를 진행 (더 큰 값으로도 가능한지 판단하기 위해)불가능하다면 값을 감소시켜 진행, 이 때 answer는 따로 할당이 필요없음.function solution(citations) { var answer = 0; let left = 0; let right..
프로그래머스 행렬의 곱셈
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12949문제 풀이위의 풀이는 예시의 첫 번째 행 [ 12, 12 ] 를 구하는 로직[ (1 * 3) + (4 * 3) , (1 * 3) + (4 * 3) ] 가 위의 로직을 통해 tmp가 계산되는 것function solution(arr1, arr2) { var answer = []; let [arr1_row, arr1_col] = [arr1.length, arr1[0].length]; let [arr2_row, arr2_col] = [arr2.length, arr2[0].length]; for (let i = 0; i  결론행렬의 곱셈을 기본적으로 알고있..
프로그래머스 n^2 배열 자르기
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/87390문제 풀이n이 10^7승까지 되므로 n x n의 2차원 배열을 하나씩 값을 채워나가는건 메모리를 너무 많이 사용하기 때문에 불가능최종 답을 보면 n x n 을 1차원 배열로 만들어서 left ~ right 까지의 숫자를 구하는 것인데,그럼 모든 n x n 배열의 값을 구하는게 아닌 left ~ right사이의 값이 포함된 행만 구하면 됨left, right를 기준으로 몇 번째 행에 해당하는지 구하여 left_row, right_row에 저장left ~ right를 반복하는 for문을 반복하고내부에 해당 열을 채워나가는 for 문을 구함 -> j가 1부터 시작하는데 i 번째 보다 작으면..
프로그래머스 할인 행사
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131127?language=javascript문제 풀이10일치의 discount 정보(제품 : 갯수)를 dict형태(discount_dict변수)로 관리10일이 지난이후(day >= 9이후)에 discount_dict에 있는 할인 제품들로 want, number가 유효한지 검사(isValid 함수) function isValid(want, number, discount_dict) { for (let i = 0; i 9) { if (discount_dict[discount[day - 10]] === 1) { delete discount_di..
프로그래머스 괄호 회전하기
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/76502문제 풀이1. String.prototype.slice 메서드를 이용해 단어를 좌측으로 한 칸씩 이동하도록 구현2. 이동한 문자열이 올바른 괄호 문자열인지 판단하는 함수(isValid)를 통해 검사function isValid(value) { let stack = [value[0]]; for (let i = 1; i 결론올바른 괄호의 판단은 stack 자료구조를 이용해 최종적으로 stack이 비어있다면 올바른 괄호이다.
프로그래머스 연속 부분 수열 합의 개수
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131701문제 풀이Ver1.첫 번째 반복문 : size 1부터 최대 elements 크기만큼 진행두 번째 반복문 : i(특정 위치) + size 만큼 합을 구하고 answer에 추가i(특정위치) + size가 elements 크기보다 작다면 [i ~ i+size]의 합을 구하여 answer에 추가하면 됨elements 크기보다 크다면 [i ~ elements 크기] 만큼 구하고(tmp) 남은 갯수를 [0 ~ remain_count]만큼 추가로 더해주면 됨원형 수열이기 때문에 남은 값은 0 ~ remain_count만큼 구해서 추가로 더해주면 됨최종적으로 answer.size를 리턴하면 해결f..
프로그래머스 카드 뭉치
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/159994문제 풀이배열의 첫 번째에 있는 값들은 순차적으로 꺼내면서 최종적인 goal을 만들 수 있는지 확인만약 배열의 첫 번째 값을 사용했다면 shift()를 사용해 해당 배열의 첫 번째 원소를 꺼냄 (shift는 원본 배열을 수정하기 때문에 첫 번째 원소가 사라짐)만약 cards1, cards2로 특정 단어(word)를 만들 수 없다면 goal을 만들 수 없으므로 'No'를 리턴function solution(cards1, cards2, goal) { for (let word of goal) { if (cards1[0] === word) { cards..
프로그래머스 [1차] 비밀지도
·
코딩테스트/프로그래머스
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17681문제 풀이1. 배열 두개의 겹치는 부분은 비트 연산자('|')를 활용해 계산2. 2진수로 변경하는 부분은 Object.prototype.toString 메서드를 활용3. 최종적으로 1은 '#'으로 0은 ' '으로 바꾸는 부분은 String.prototype.replaceAll 메서드 활용+ 계산을 하다보면 배열의 길이 만큼 이진수가 안나올 경우 String.prototype.padStart 메서드 활용ex: 22 | 14 는 이진수로 '11110' 임 -> 만약 6자리의 이진수가 필요하다면 앞에 0이 있는 '011110'이되야 정답이 됨따라서 위 메서드를 이용하여 '11110'.pad..