알고리즘/프로그래머스

[해시] 의상 - Python / JavaScript

Dev. Dong 2025. 3. 23. 13:34

문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 간단 요약]

1. 주어진 의상 중 종류 별로 최대 1개의 의상을 착용 할 때 모든 경우의 수를 구하는 문제

2. 종류따라 꼭 하나씩 착용 해야하는 문제는 아님

[문제 해결 방안]

1. 의상의 종류에 따른 의상의 갯수를 딕셔너리 형태로 기록

2. 종류에 따라 입을 수 있는 경우의 수는 (의상의 갯수 + 1)로 입지 않는 경우를 생각해야함

3. 전체 경우의 수에서 아무것도 입지 않는 경우를 제외하

 

[문제 해결 코드 - python]

def solution(clothes):
    dic = {}
    for name, catagory in clothes:
        if catagory not in dic:
            dic[catagory] = 1
        else:
            dic[catagory] += 1
    cnt = 1
    for key, value in dic.items():
        cnt *= value+1
    return cnt-1

 

[문제 해결 코드 - javascript]

function solution(clothes) {
    let dict = {};
    for (let cloth of clothes) {
        if (!dict[cloth[1]]) {
            dict[cloth[1]]=[]
        }
        dict[cloth[1]].push(cloth[0])
    }
    let cnt = 1
    for ([key, value] of Object.entries(dict)) {
        cnt *= (value.length+1)
    }
    return cnt - 1
}

 

코드 개선점
  • 어떠한 문제를 해결할때 원하는 결과를 도출하려고 해야함
  • javaScript의 코드의 경우 list를 생성하여 각 의상을 넣어서 해당 배열의 길이를 구해서 문제 해결 (단점: 계산식 복잡 + 성능 저하/ 장점: 복잡한 문제의 경우 디버깅 하기 쉬움)
  • 각 항목에 갯수를 기록하여 문제를 풀는게 더 효율적임