오늘은 문제를 해석하는 능력을 길러볼려고 문제 설명이 긴 문제 중 Pick해봤다. 하루 45분 동안 2~3문제씩 풀고있어서 10월이 지나기 전에 2단계로 넘어갈 계획이다.
문제 요약: 연구실에 있는 총 N 마리의 폰켓몬 중 N/2마리를 고를 수 있다. 종류가 [3, 1, 2, 3]이라면 3번 두 마리, 1번 한 마리, 2번 한 마리가 있는 것이다.
이때, 중복된 폰켓몬을 뽑으면 한 종류로 생각한다. 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려고 할때 최대 몇 종류를 가져갈 수 있는지 구하여라.
입출력 예
nums | result |
---|---|
[3, 1, 2, 3] | 2 |
[3, 3, 3, 2, 2, 4] | 3 |
[3, 3, 3, 2, 2, 2] | 2 |
나의 풀이
function solution(nums) {
const maxPick = nums.length/2,
// 뽑았을 때 중복이 하나도 없어서 가장 많이 선택할 수 있을때를 maxPick이라고 가정 한다.
dDLen = [...new Set(nums)].length;
// 중복을 모두 제거한 길이를 dDLen(Deduplication Length)라고 한다.
return maxPick > dDLen ? dDLen : maxPick;
// 만약 중복을 제거했을때 길이가, N/2를 선택했을때 보다 작으면 중복을 제거했을때 길이가 최대한 많은 종류와 같아서 dDLen를 리턴하고, 이외에는 maxPick을 리턴한다.
}
문제: 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어라.
예시) N = 123이면 1 + 2 + 3 = 6을 return 하면 된다.
입출력 예
N | answer |
---|---|
123 | 6 |
987 | 24 |
나의 풀이
function solution(n) {
const nums = n.toString().split('');
// split()을 사용하기 위해서 먼저 string으로 바꾸었다. 만약 n이 123이었으면 nums는 ['1', '2', '3']이다
return nums.reduce((acc, cur) => acc + parseInt(cur), 0);
// reduce를 사용해서 순서대로 숫자로 다시 변환해서 더한다.
}