[Lv2] 위장

Creating the dots·2022년 1월 10일
0

Algorithm

목록 보기
47/65

프로그래머스

나의 풀이

수도코드

  • 옷의 종류를 키로 가지고 개수를 값으로 가지는 객체를 생성한다.
    ex. const hash = {headgear: 2, eyewear:3}
    • 이 문제는 옷 종류별로 한개씩만 선택할 수 있고, 그 종류의 개수가 중요한 것이지 옷의 이름은 중요하지 않다. 따라서 객체의 키-값 형태로 옷종류-개수를 저장한다.
  • 각 옷의 종류를 선택하지 않는 경우의 수를 1을 더해서 각 경우의 수를 모두 곱한다.
  • 모든 종류의 옷을 하나도 고르지 않은 경우의 수 1을 뺀 후 리턴한다.
function solution(clothes){
  const hash = clothes.reduce((acc,cur) => {
    acc[cur[1]] = acc[cur[1]] ? acc[cur[1]]+1 : 1;
    return acc;
  },{});
  let answer = 1;
  for(const el in hash){
    answer *= hash[el] + 1;
  }
  return answer - 1;
}

다른 분의 풀이

  • obj[el[1]] = (obj[el[1]] || 0) +1;
    obj[el[1]]값이 undefined이면 0, 값이 있으면 obj[el[1]]을 할당한 뒤 1을 더해준다. 이 부분은 삼항연산자로 작성한 부분과 같은 역할을 하는데, ||를 사용해서 작성한 부분이 새로웠다.
function solution(clothes) {
  let answer = 1;
  const obj = {};
  for(let el of clothes){
    obj[el[1]] = (obj[el[1]] || 0) +1;
  }
  for(let key in obj){
    answer *= (obj[key]+1);
  }
  return asnwer -1;
} 

  • 배열은 선형탐색을 해서 O(n)의 시간복잡도가 걸리는 반면 객체를 사용하면 O(1)로 원하는 키값을 검색할때 효율적이다.

  • 완주하지 못한 선수에서도 객체를 활용해서 풀었는데, 카테고리/유형별로 개수나 값을 저장할때 활용할 수 있을 것 같다.

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글