본문 바로가기
Algorithms & CS

[Javascript] 프로그래머스 - 위장

by 고막고막 2020. 8. 29.

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

나의 풀이

function solution(clothes) {
    var answer = 1;
    var answerArr = new Array();
    var type = new Array();
    for(var i = 0; i < clothes.length; i++) {
        type[i] = clothes[i][1];
    }
    var uniqueType = type.reduce((acc,curr) => acc.includes(curr) ? acc : [...acc,curr],[]);
    for(var i = 0; i < uniqueType.length; i++) {
      answerArr[i] = 0;
      for(var j = 0; j < clothes.length; j++) {
        if(uniqueType[i] == clothes[j][1]) {
           answerArr[i] += 1;
        }
      }
    }
    answerArr.forEach((c) => answer *= (c + 1));
    return  answer - 1;
}
  1. 주어진 2차원 배열에서 옷의 종류만 뽑는다
  2. 옷의 종류를 reduce 함수를 사용해 중복제거 한다
  3. 각 종류 마다의 옷의 개수를 count한 배열을 만든다
  4. 각 옷들을 입지 않을 경우의 수를 고려해 각 원소마다 1을 더해 모두 곱하고
  5. 그 값에서 아무것도 입지 않을 경우를 제외하기 위해 -1 을 한 후 리턴한다

다른 사람의 풀이

function solution(clothes) {
    let answer = 1;
    let hashTable ={};
    for(let i of clothes){
        hashTable[i[1]] = (hashTable[i[1]] || 1) + 1;
    }
		//consonle.log(hashTable);
		//{headgear: 3, eyewear: 2}
    for(let i in hashTable){
        answer *= hashTable[i];
    }
    return answer -1;
}
  1. HashTable은 key를 통해 인덱싱을 하므로 배열의 뒷 원소를 기준(key)으로 잡는다
  2. 아직 존재하지 않는 key이면 index를 추가한 뒤 1을 더하고(+2),
  3. key값이 이미 존재하면 그냥 1만 더한다 (+1)
  4. HashTable안의 값들을 모두 곱한 후 -1을 한 후 리턴한다

Things to Learn

- hashtable에 대한 내용은 아래 포스팅을 참고함
- 경우의 수 구하는 공식... 
- map을 써도 구현 가능함

 

JavaScript와 함께 해시테이블을 파헤쳐보자

이번 포스팅에서는 많이 사용되는 자료구조 중 하나인 에 대해서 정리하려고 한다. 먼저 이 무엇인지, 왜 사용하는지 알아보자!

evan-moon.github.io