스터디 기록7

유아현·2022년 11월 21일
0

Study

목록 보기
8/27
post-thumbnail

오늘의 스터디 문제 목록

1. 삼총사

// 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;
}

내가 작성한 코드... 새삼 초라해 보이기 짝이 없따 ㅋㅋㅋㅋㅋㅋ 민혁님이 재귀로도 풀고 다른 방식으로도 풀었는데 두 방식 모두 좋았다!

2. 2016년

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란 편리한 함수가 있었다는 것,,,,, 왜 요걸 쓸 생각을 못했을까.... 아무튼 한 번 훑고 가자!

Date.prototype.getDay()

  • 주어진 날짜의 현지 시간 기준 요일을 반환 / 0은 일요일을 나타낸다.
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

3. 폰켓몬

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.prototype.size

Set 객체의 원소 수를 반환

Array.length

배열의 길이를 반환

다음 사이트를 참고해 보자!
https://ko.javascript.info/map-set

0개의 댓글