점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세..
코딩 테스트/Programmers - 1
문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..
문제 설명 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택 첫..
[풀이] function solution(x) { const newArr = x .toString() .split("") .map((arg) => Number(arg)); let sum = 0; for (let i = 0; i < newArr.length; i++) { sum += newArr[i]; } return x % sum === 0 ? true : false; } 1. 새로운 배열을 담을 변수를 만들고 x를 문자열로 변환해준다. (배열에 담기위해서..) 2. 그리고 문자열을 쪼개 배열로 만들고, map 함수를 이용해 숫자로 바꿔준다. 그러면 [1, 0]이 되어 있을 것. 3. 합한 수를 담을 변수를 만든다 (sum) 4. for문을 새로운 배열의 길이만큼 순회시키고, sum 변수에 새로운 배열의..
[풀이] function solution(n) { const arr = n.toString().split("").sort(); const result = parseInt(arr.reverse().join("")); return result; } 1. 배열을 담을 변수를 만들고 n을 문자열로 변환후 쪼개서 잘라 배열에 담고 오름차순으로 정리해준다. 2. 그 배열을 뒤집고(내림차순으로 만들기위해) 붙여준 후 숫자로 바꿔준 결과값을 리턴한다. [코드리뷰] function solution(n) { const arr = n.toString().split("").sort((a, b) => b - a).join("") return parseInt(arr); } 1. sort()를 사용할 때 의도치 않은 결과가 나오는..
[풀이] function solution(n) { const str = n.toString(); //const mapNum = (arg) => Number(arg); const newArr = str.split("").map((arg) => parseInt(arg)); return newArr.reverse(); } 1. n을 문자열로 만들어준다. "12345" 2. 새 배열에 그 문자열을 쪼개서 담아주고 map 함수를 이용해 숫자로 바꿔준다. [1, 2, 3, 4, 5] 3. 새 배열을 뒤집어 리턴한다. [코드 리뷰] function solution(n) { return n.toString().split("").map(Number).reverse(); } 별다른 변수를 설정하지 않고 한줄로도 코드 작성..
[풀이] function solution1(sizes) { const newArr = sizes.map(([w, h]) => (w > h ? [w, h] : [h, w])); const w = []; const h = []; for (let i = 0; i < sizes.length; i++) { w.push(newArr[i][0]); h.push(newArr[i][1]); } return Math.max(...w) * Math.max(...h); } 문제를 이해하고 더 큰 숫자를 배열에서 가장 앞쪽에 위치하게 하려고 했다. 처음엔 이중 for문을 통해서 풀어주려고 했는데 굳이 그러지 않아도 됐다. 가로 * 세로 이기 때문에 어처피 인덱스값은 2개만 있을 것이고 0,1 만 쓰므로 굳이 반복을 하지 않아도..
[풀이] function solution(s) { return s .toLowerCase() .split(" ") .map((str) => { return str .split("") .map((el, idx) => (idx % 2 === 0 ? el.toUpperCase() : el)) .join(""); }) .join(" "); } 1. s를 먼저 모두 소문자로 바꿔준다. → 단순히 예제만 보고 생각했을 때 모두 소문자라 생각을 못했는데.. 많은 가능성을 열어두고 생각해야 했다. 예제가 모두 소문자라 할지라도 여러가지 경우의 수가 있으며 인덱스 홀수 번째 문자가 대문자일 수도 있다. (이 생각을 못함) 나무를 보지말고 숲을 봐야한다. 코딩테스트를 풀 때는 히든케이스도 고려해야 한다. 2. 그리고 공백..