본문 바로가기
알고리즘/Problem Solving

프로그래머스 - 의상

by 도툐리 2024. 2. 18.

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

 

 


깨달음

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

'알고리즘 > Problem Solving' 카테고리의 다른 글

프로그래머스 - 올바른 괄호  (0) 2024.02.20
프로그래머스 - 기능개발  (0) 2024.02.19
오늘 문제풀이 하면서 깨달은 점  (0) 2024.02.18
프로그래머스 - 전화번호목록  (1) 2024.02.17
(Day1) Hash  (0) 2024.02.17

댓글