[programmers] Lv2. 위장 Javascript | protect-me

protect-me·2021년 8월 9일
0
post-thumbnail

🕊 Link

Lv2. 위장 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42578

🧑🏻‍💻 Code(javascript)

function solution(clothes) {
  const list = new Map();
  clothes.forEach(item => {
    if (list.has(item[1])) {
      list.set(item[1], list.get(item[1]) + 1)
    } else {
      list.set(item[1], 1)
    }
  })
  let arr = []
  list.forEach((item) => {
    arr.push(++item)
  })

  const answer = arr.reduce((acc, cur) => {
    return acc * cur
  }, 1)

  return answer - 1
}

💡 Solution

function solution(clothes) {
  const list = new Map(); // map 초기화
  clothes.forEach(item => {
    // clothes를 돌면서 item[i]가 있으면 ++, 없으면 1로 세팅
    if (list.has(item[1])) {
      list.set(item[1], list.get(item[1]) + 1)
    } else {
      list.set(item[1], 1)
    }
  })
  // map의 값들에 +1을 한 값들을 arr에 push 
  // => 각각을 착용하는 경우의 수에 착용하지 않는 경우가 있기 때문에 +1
  let arr = []
  list.forEach((item) => {
    arr.push(++item)
  })

  // reduce로 요소들을 모두 곱한 후 => 경우의 수이기 때문에 모두 곱함
  const answer = arr.reduce((acc, cur) => {
    return acc * cur
  }, 1)

  // -1한 값을 return => 모두 안입는 경우를 제외
  return answer - 1
}

👨‍👦‍👦 others

// 1
function solution(clothes) {
    let answer = 1;
    const obj = {};
    for(let arr of clothes) {
        obj[arr[1]] = (obj[arr[1]] || 0) + 1; // 있으면 +1, 없으면 1 할당
    }
    for(let key in obj) {
        answer *= (obj[key]+1);
    }
    return answer - 1;
}

// 2
function solution(clothes) {
    let key = new Map()
    for(let i = 0 ; i < clothes.length ; i ++){
        if(key.has(clothes[i][1])){
            key.set(clothes[i][1], key.get(clothes[i][1])+1)
        }else{
            key.set(clothes[i][1],1)
        }
    }
    let answer = 1
    for(let a of key.values()){
        answer *= (a+1)
    } // for of는 map도 순회 가능함!!!
    return answer-1
}

👨🏻‍💻💭 Self Feedback

  • hash라고 굳이 map으로만 할 필요는 없고 object가 더 편할수도 있음.
  • for of는 map도 순회가 가능함.
  • for(let a of key.values())와 같이 값을 바로 받을 수 있음.
  • ||을 이용한 if문 대체
    obj[arr[1]] = (obj[arr[1]] || 0) + 1; 와 같이
    '또는(||)'은 처음 만나는 true 값을 return 한다는 속성을 이용

  • 2021.08.09 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글