알고리즘/Problem Solving

프로그래머스 - 의상

도툐리 2024. 2. 18. 02:05

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이1] 내 풀이

from collections import defaultdict

def solution(clothes):
    
    # (1) 두번째 인자가 key, 첫번째 인자가 value로 가게. dict 사용
    my_dict = defaultdict(list) # value를 빈 배열로 초기화
    for c in clothes:
        c_name, c_type = c[0], c[1]
        my_dict[c_type].append(c_name)
        
    # (2) 각 value 배열의 len+1(1은 해당 종류를 입지 않는 경우)을 
		# 모두 곱한것에서 1(아무것도 입지 않는 경우)을 뺀다
    answer = 1
    for _, val in my_dict.items():
        answer *= (len(val) + 1)
    answer -= 1
    
    return answer
  • 정답은 맞췄는데 뭔가 불필요하게 복잡해진듯한 기묘한 느낌쓰가 있었음.
  • O(n)

 

[풀이2] 더 나은 남의 풀이

def solution(clothes):
    clothes_type = {}

    for _, t in clothes:
        if t not in clothes_type:
            clothes_type[t] = 2 # 해당 종류를 아예 안입는 경우 + 현재 아이템
        else:
            clothes_type[t] += 1 # 현재 아이템

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

    return cnt - 1
  • 오. 외부라이브러리 안쓰고도 몹시 깔끔
  • 이 풀이 보니까 위에서 내가 불필요한 데이터들을 사용하느라 뭔가 기묘하게 코드가 복잡했다는것을 깨달음

 

 


깨달음

  • 내가 혹여나 불필요한 데이터들을 저장하거나 사용하진 않았나? 다시 한번 돌아보고 경량화 할 수 있는 부분들 최대한 경량화하기.
    • 꼭 필요한 데이터들만 저장하고 사용하기.