[프로그래머스] 위장

지수 🤓·2020년 2월 20일
0

알고리즘

목록 보기
1/15

링크

dict 안에 list를 담아서 해시를 만들면 될거라고 생각했다.
그리고 combination 함수를 이용해서 조합을 잘 하면 될 것 같았다. 아니었다 언제쯤 팍 떠오를까

조합은 맞았으나 더 간단하게 생각하면 풀리는 문제였다.
우선 해시를 만들어서 같은 키를 가지는 value를 넣어준다. (value, key)의 형태로 들어오니까 (1,1), (2,1)가 들어온다고 생각하면, 해쉬 맵은 {1 : [1, 2]}가 된다.

그 다음 묶어진 value들끼리 조합을 만들어준다. 간단하게 value 개수를 곱해주면 된다.
여기서 주의해야 할 점은 한 카테고리에서 선택을 안하는 경우도 넣어 줘야 하기 때문에, +1을 한 상태에서 곱해준다.
이렇게 되면 모든 카테고리에서 선택을 안하는 경우가 나오기 때문에 정답에서 -1을 해서 그 경우를 빼준다.

내 코드

def solution(clothes):
    answer = 1
    hash_map = dict()

    for value, key in clothes:
    	# 키가 없는 경우 키를 가지는 리스트를 만들어준다
        if key not in hash_map.keys():
            hash_map.setdefault(key, [])
        hash_map[key].append(value)
    for i in hash_map.values():
        answer *= (len(i)+1)
    return answer-1

안 좋은 점은 배열에 값을 넣고 그 길이를 구한다는 것이다.
다른 사람 코드 처럼 아예 수를 넣어주는게 더 효율적일 것 같다.
대반전 거의 비슷했음 우웁스

다른 사람 코드

def solution(clothes):
    clothes_type = {}

    for c, t in clothes:
        if t not in clothes_type:
            clothes_type[t] = 1
        clothes_type[t] += 1

    cnt = 1
    for num in clothes_type.values():
        cnt *= num

    return cnt - 1
profile
Backend Junior Developer

0개의 댓글