오늘의 스터디 문제 목록
// n: arr.length
// get nCr by recursive method
function getCombinations(arr, r) {
const results = [];
// if r===1, fixed와 각각 조합을 위해 return [[el], ...]
if (r === 1) return arr.map((el) => [el]);
arr.forEach((fixed, idx, origin) => {
// fixed: origin[idx] // default
// rest = arr - fixed
const rest = origin.slice(idx + 1);
// recursive: get combination of rest, r-1
const combinations = getCombinations(rest, r - 1);
// fixed와 재귀 리턴된 배열 합치기
const attached = combinations.map((el) => [fixed, ...el]);
// push to results
results.push(...attached);
});
// return
return results;
}
재귀로 풀어서 인상 깊었던 민혁님 코드 재귀의 ㅈ도 떠오르지 않아서 재귀 방식으로 풀지 않았지만 떠올라도 코드로 짜내지 못했을 듯.... 그래도 코드로 보니까 어떻게 돌아가는지 이해할 수 있어서 좋았다!! 처음에 생각해낸 방식 말고도 다른 방식으로 풀어보려고 짱구를 좀 더 굴려야 할 듯...
function solution(number) {
// 1번째 for문, 초기값: 0번째 인덱스부터 시작해서
// 2번째 for문, 초기값: 1번째 for문의 초기값 + 1번째 인덱스부터 끝까지
// 3번째 for문, 초기값: 2번째 for문의 초기값 + 1번째 인덱스부터 끝까지
// 3번째 for문에서 1, 2, 3 끼리 더해서 0이면 count++
// count를 return
let count = 0;
for(let i = 0 ; i < number.length ; i++){
for(let j = i+1 ; j < number.length ; j++){
for(let k = j+1 ; k < number.length ; k++){
if(number[i] + number[j] + number[k] === 0){
count++;
}
}
}
}
return count;
}
내가 작성한 코드... 새삼 초라해 보이기 짝이 없따 ㅋㅋㅋㅋㅋㅋ 민혁님이 재귀로도 풀고 다른 방식으로도 풀었는데 두 방식 모두 좋았다!
function solution(a, b) {
// a월 b일이 총 몇 일인지 먼저 구하기
// 7로 나눈 나머지 번째 요일?
// 29일: 2,
// 30일: 4, 6, 9, 11
// 31일: 1, 3, 5, 7, 8, 10, 12
let month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
let day = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
let day_sum = 0;
for(let m = 0; m < a ; m++){
day_sum += month[m]
}
day_sum += (b + 4) ; // 모든 일수를 더함
day_sum = day_sum % 7; // 7로 나눔...
// 결과값이 다르게 나와서!! 생각해 보니까 1월 시작이 금요일부터 시작이라 총일수에 +4를 해 준다!
return day[day_sum]
}
내가 작성한 코드 총 일수를 구해서 나눠 주고 나눠 준 값을 인덱스로 줘서 풀었다 다른 방법은 생각이 나지 않아서 이 코드를 그대로 들고 갔는데 getDay란 편리한 함수가 있었다는 것,,,,, 왜 요걸 쓸 생각을 못했을까.... 아무튼 한 번 훑고 가자!
function solution(month, day) {
const weekarr = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
let date1 = new Date(`2016-${month}-${day}`);
return weekarr[date1.getDay()];
}
solution(5, 24);
동원님 코드!! 0부터 일요일인 게 인덱스가 0부터 일요일부터 시작하는 것과 같아서 리턴으로 getDay를 주는 방법!! 천재다... bb
function solution(nums) {
// 홍박사가 나한테 자기 연구실에 있는 N마리 폰켓몬 중에서 N/2마리를 가져가도 된다고 함
// 폰켓몬은 종류에 따라 번호를 붙여서 구분 === 같은 종류는 같은 번호
// nums / 2가 내가 가지고 올 수 있는 폰켓몬 수
const half = nums.length / 2;
// 종류가 겹치지 않는 폰켓몬을 가지고 오길 원함 set || filter로 중복을 없애 준다
// const only = [...new Set(nums)].length // set 사용
const only = nums.filter((a, b) => { //filter 사용
return nums.indexOf(a) === b;
}).length;
return only > half ? half : only;
}
필터 배운 김에 써 보고 싶었는데 드디어 썼다!!! 나는 중복값을 없애는데 set과 filter 방식을 사용했다 // 근데 스터디원 코드 리뷰하다가 length와 size 얘기가 나와따
Set 객체의 원소 수를 반환
배열의 길이를 반환
다음 사이트를 참고해 보자!
https://ko.javascript.info/map-set