문제 링크 programmers.co.kr/learn/courses/30/lessons/77486 코딩테스트 연습 - 다단계 칫솔 판매 민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후, programmers.co.kr 풀이 칫솔을 팔아서 한 번에 얻을 수 있는 이익이 최대 10,000원이고, 10%씩 부모에게 상납해야 하므로 최대 5세대 위의 부모까지만 상납하면 됩니다. 1) 각 사람의 부모를 저장해줍니다. 2) 사람과 이익금이 주어졌을 때 부모에게 10%씩 상납하는 함수를 만듭니다. 3) 각 칫솔 판매마다 재귀적으로 돌려줍시다. ES2015 이후로 객체 프로퍼티의 키가 s..
블로그를 관리하다 보면 좀 불편한 구석이 몇 개 있다. 물론 굉장히 잘 만들어진 스킨이라 제작자분에게 정말 감사하지만.. 카테고리별 글 수가 안 나오는 게 자꾸 눈에 걸렸다. 우측 상단의 카테고리 바를 누르면 이렇게 리스트로 나타난다. 1차 카테고리로 들어가면 그 카테고리에 직접 쓴 글과 하위 카테고리에 쓴 글을 모두 볼 수 있다. 근데 뭐랄까 좀 명확하지 않다. 블로그에 온 사람이 저런 카테고리를 보면 하위 카테고리로만 들어갈 것 같은 느낌? 상위 카테고리는 그저 분류만 해놓은 느낌?? 이게 항상 아쉬웠다. 실제로 방문 통계의 기타 유입을 확인해보면 하위 카테고리가 있는 카테고리 중 1차 카테고리로 접근한 페이지가 별로 없다. 이런 이유 때문에 카테고리별 글 수를 표시하기로 했다. 예전에 블로그 스킨을..
문제 링크programmers.co.kr/learn/courses/30/lessons/68645코딩테스트 연습 - 삼각 달팽이5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]programmers.co.kr 풀이문제의 요구대로 시뮬레이션해줍시다.아래 방향, 오른쪽 방향, 윗 방향의 순서대로 값을 채웁니다.이때 $n, n-1, n-2, ..., 1$개씩 채워주면 됩니다. 각 동작을 함수로 구현하고 적절한 시작점과 길이를 넘겨줍시다. 정답 코드let ans, num = 1; const down = (x, y, l) => { if(l == 0) return; for(let k = 0; k..
문제 링크programmers.co.kr/learn/courses/30/lessons/68936?language=javascript#코딩테스트 연습 - 쿼드압축 후 개수 세기[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15]programmers.co.kr 풀이재귀 함수를 이용하면 됩니다. 1) 배열의 모든 수의 합을 구합니다. 이때 n차원 배열을 풀어주는 flat() 함수를 이용하면 편합니다. fla..
문제 링크 programmers.co.kr/learn/courses/30/lessons/70129 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr 풀이 정규 표현식을 이용하여 간단하게 풀 수 있습니다. 1) regexp /1/g를 이용해 s에서 1만 뽑아줍시다. 2) 정답에 (s의 길이 - 위에서 구한 1들의 개수)를 더해줍니다. 3) 1들의 개수를 2진 변환합니다. 4) s가 1이 될 때까지 반복합시다. 정답 코드 function solution(s) { const ans = [0, 0]; while(s !== '1'){ const cnt = s.match(/1/g).length; ans[0]++; ans[1] += s.length - cnt; s = cnt.toString(2)..
문제 링크 programmers.co.kr/learn/courses/30/lessons/68935 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 풀이 자바스크립트는 진법 변환을 지원합니다. toString() 메소드는 일반적으로는 수를 string으로 바꿔주는 함수이지만, 기수를 인자로 주면 그에 맞는 진수로 변환해줍니다. parseInt() 함수는 string을 수로 바꿔주는 함수이며, string이 몇 진수인지 기수를 인자로 주면 그에 맞춰 10진수로 변환해..
문제 링크 programmers.co.kr/learn/courses/30/lessons/68644 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 풀이 모든 쌍을 배열에 넣고 정렬해줍시다. 이때, include()를 이용하여 존재하지 않는 원소일 때만 넣어줍니다. 정답 코드 unction solution(numbers) { const p = []; for(let i=0; i
문제 링크 programmers.co.kr/learn/courses/30/lessons/70128 코딩테스트 연습 - 내적 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 programmers.co.kr 풀이 reduce 함수를 이용해 쉽게 구현합시다. 정답 코드 function solution(a, b) { return a.reduce((ans, cur, i) => ans + a[i] * b[i], 0); }
문제 링크 programmers.co.kr/learn/courses/30/lessons/72410?language=javascript# 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 자바스크립트 연습 겸 프로그래머스 레벨 1 문제들을 풀어보고 있습니다. 이 문제를 C++로 풀 때는 몰랐는데 막상 풀어보니 정규표현식에 입문하기 너무 좋은 문제입니다. 이리저리 검색해보면서 정규표현식이 되게 친숙해졌습니다. 이게 복잡해 보여서 그렇지 정규식 생각보다 어렵지 않습니다.. 우선 전체적인 코드는 이렇습니다. f..
문제 링크 www.acmicpc.net/problem/1086 1086번: 박성원 첫째 줄에 정답을 기약분수 형태로 출력한다. p/q꼴로 출력하며, p는 분자, q는 분모이다. 정답이 0인 경우는 0/1로, 1인 경우는 1/1로 출력한다. www.acmicpc.net 풀이 문제를 해결하기에 다음과 같은 어려움이 있습니다. 1) 모든 순열을 고려해봐야 하는데 $O(N!)$이라 경우의 수가 너무 많습니다. 2) 순열을 합친 큰 정수가 커도 너무 큽니다. 최대 750자리 수입니다. 수가 너무 큰데?? 2번 문제부터 해결해봅시다. 사실 우리는 정확한 수를 알고 있을 필요가 없습니다. 결국 알고 싶은 사실은 어떤 수 $x$가 $k$로 나누어 떨어지는지입니다. 이를 백준 8111 - 0과 1 문제와 같은 방식으로 ..