function solution(a, b) {
var answer = 0;
arr=[];
if(a===b) return a;
arr.push(a,b)
console.log(a,b);
console.log(a+1);
for(let i = 1; i<b-a; ++i) {
console.log(a+i)
arr.push(a+i);
}
console.log(arr)
answer = arr.reduce((acc,cur)=> acc+cur);
return answer;
}
solution(3,5); //12
이렇게 풀면 3,5 는 가능한데 5,3은 안됨
둘 중에 작은 수에 더해주면 될 것 같음
function solution(a, b) {
var answer = 0;
arr=[];
if(a===b) return a;
arr.push(a,b)
let min = Math.min(a,b);
let abs = Math.abs(a-b);
for(let i = 1; i<abs; ++i) {
arr.push(min+i);
}
answer = arr.reduce((acc,cur)=> acc+cur);
return answer;
}
solution(3,5); // 12
solution(5,3); // 12
풀긴 풀었는데 너무 길고 ... 변수 선언도 많은 것 같은데 줄일 수 없나?
등차수열 ? . .
양 끝에 있는 수끼리 더하고 거기에 갯수만큼 곱하고 반으로 나누면 !
1부터 몇까진가 쉽게 계산했던 초등학생(?) 아이...ㅎ 였던 어떤 수학자 공식...
근데 코드로 어떻게 쳐야할지?
function solution(a, b) {
var answer = 0;
// a+b // 일단 둘이 더하고
// (a+b) * Math.abs(a-b) // 거기에 갯수를 곱한다
answer = (a+b) * Math.abs(a-b) * 0.5 // 나누기 2
return answer;
}
오>_< 이정도면 완전 만족! 아예 answer에 할당 안 하고 return으로 한 번에 돌려줘도 될 것 같다.
나누기보다 0.5 곱하는 게 c++에선 무리가 덜갔던 걸로 기억해서 0.5 곱으로 했다.
두 번째 문제~
당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.
- 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택
- 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택
- 첫 번째(3번), 네 번째(3번) 폰켓몬을 선택
- 두 번째(1번), 세 번째(2번) 폰켓몬을 선택
- 두 번째(1번), 네 번째(3번) 폰켓몬을 선택
- 세 번째(2번), 네 번째(3번) 폰켓몬을 선택
이때, 첫 번째(3번) 폰켓몬과 네 번째(3번) 폰켓몬을 선택하는 방법은 한 종류(3번 폰켓몬 두 마리)의 폰켓몬만 가질 수 있지만, 다른 방법들은 모두 두 종류의 폰켓몬을 가질 수 있습니다. 따라서 위 예시에서 가질 수 있는 폰켓몬 종류 수의 최댓값은 2가 됩니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.
4마리의 포켓몬 중 2마리를 고르는 방법은 4H2 맞나? 4*3/2 = 6
폰켓몬이 2마리 이상일 때만 중복으로 고를 수 있다.
폰켓몬이 총 6마리 있고, 거기에 마릴이 두 마리, 이브이 한 마리, 에브이 한 마리, 피카츄 한 마리, 꼬부기 한 마리일 때 무조건 마릴을 두 마리 뽑는 경우의 수를 제외하면 폰켓몬을 최대 종류로 가질 수 있다. 그럼 이브이 3, 마릴 2, 피카츄1, 꼬부기1 이렇게 7마리면? 은 N은 짝수!
이브이 3, 마릴2, 피카츄1 이면 세 마리를 골라야 하고, 여기서 제일 적게 갖는 건 이브이 세 마리, 이브이 두 마리 + 마릴/피카츄, 마릴2 + 이브이/피카츄 임... 많은 종류를 갖는 경우의 수는 세 마리 중 세 마리 다 뽑는 것. 그러면 주어진 포켓몬 수에서 일단 한 마리씩 다 뽑으면 될 것 같다. ~~~~~~~~~~~라고라고 생각하고 풀고 있었는데 경우의 수 구하는 게 아니라 최대 몇 종류 뽑을 수 있느냐를 구해야하니까 일단 중복부터 거름... 거르고 선택할 수 있는 포켓몬 종류의 수랑 선택할 수 있는 포켓몬 수 둘 중 작은 걸 반환하면 된다.
function solution(nums) {
let arr = [];
for(let i = 0; i< nums.length; ++i) {
if(arr.includes(nums[i])===false) {
arr.push(nums[i]); // 중복거르기
}
}
console.log(arr.length) // 선택가능한 폰켓몬 종류 수
console.log(nums.length/2) // 선택가능한 폰켓몬 수
return arr.length > nums.length/2 ? nums.length/2 : arr.length; // 둘 중 작은 걸 return
}
// 다른 사람 풀이
function solution(nums) {
const max = nums.length / 2;
const arr = [...new Set(nums)];
return arr.length > max ? max : arr.length
}
Set...? Set이 뭔데??
Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.
따란 중복을 걸러주는 애였고 분명 Set에 대해 포스팅한 적이 있던 것 같다.... ㅠ ㅠㅠ ㅠㅠ
중복만 나오면 한없이 약해지는 나 .......
for문 몇 줄이 저렇게 줄어들 수 있다!
재밌당 ㅎㅎ 포문최고..ㅠ.
'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글
220611 프론트엔드 부트캠프 32일차 : 주말, (0) | 2022.06.12 |
---|---|
220610 프론트엔드 부트캠프 31일차 : HOF, react-hook-form, yup (0) | 2022.06.11 |
220609 프론트엔드 부트캠프 30일차 : Diffing, Hydration, closure, HOC/HOF (0) | 2022.06.10 |
알고리즘 - 피보나치 수열, (0) | 2022.06.09 |
220608 프론트엔드 부트캠프 29일차: 로그인, 암호화, JWC 토큰 (0) | 2022.06.09 |