알고리즘/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
- 오. 외부라이브러리 안쓰고도 몹시 깔끔
- 이 풀이 보니까 위에서 내가 불필요한 데이터들을 사용하느라 뭔가 기묘하게 코드가 복잡했다는것을 깨달음
깨달음
- 내가 혹여나 불필요한 데이터들을 저장하거나 사용하진 않았나? 다시 한번 돌아보고 경량화 할 수 있는 부분들 최대한 경량화하기.
- 꼭 필요한 데이터들만 저장하고 사용하기.