[Programmers] μœ„μž₯

Updated:

μœ„μž₯

μœ„μž₯ 을 ν΄λ¦­ν•˜λ©΄ λ°”λ‘œ μ΄λ™ν•œλ‹€.

이 λ¬Έμ œλŠ” κ·Έλƒ₯ 정말 순수 100% μˆ˜ν•™ 문제..

그게 μ•„λ‹ˆλ©΄ 아무리 생각해도 νš¨μœ¨μ„±μ—μ„œ 톡과λ₯Ό ν•  수 없을 것 κ°™λ‹€.


λ¨Όμ € 2μ‹œκ°„μ„ λ„˜κ²Œ κ³ λ―Ό ν•΄ λ΄€μ§€λ§Œ 더 이상 λΉ λ₯΄κ²Œ ν•  μˆ˜μ—†μ—ˆλ˜ μ½”λ“œλ₯Ό μ„€λͺ…ν•΄μ•Όκ² λ‹€.

from itertools import combinations
from collections import Counter

def multi(arr):
	result = 1
	for val in arr:
		result *= val
	return result


def solution(clothes):
	answer = 0
	clothes_cnt = [val[1] for val in clothes]
	clothes_dict = dict(Counter(clothes_cnt))

	_list = list()

	for i in range(1, len(clothes_dict) + 1):
		_list += list(combinations(clothes_dict.values(), i))

	for cur in _list:
		answer += multi(cur)

	return answer

예λ₯Ό λ“€μ–΄ μƒμ˜, ν•˜μ˜, λͺ¨μžκ°€ 각각 3, 2, 2 개 μ”© μžˆμ—ˆλ‹€κ³  ν•œλ‹€λ©΄ 경우의 μˆ˜λŠ”

3 + 2 + 2 + (3 * 2) + (3 * 2) + (2 * 2) + (3 * 2 * 2) κ°€ λœλ‹€.

λ‚΄κ°€ 생각 ν•œ 문제의 풀이 방법은 이 방법이 μ΅œμ„ μ΄μ˜€λ‹€.

μ–΄λ–€ λ°©μ‹μœΌλ‘œ ν•˜λ˜ 쑰합을 κ΅¬ν•΄μ„œ 계산을 ν•΄μ•Ό ν–ˆκΈ° λ•Œλ¬Έμ— combination 은 κΌ­ ν•„μš”ν–ˆλ‹€.

ν•˜μ§€λ§Œ κ²°κ³ΌλŠ” μ‹œκ°„μ΄ˆκ³Ό.. 아무리 생각해도 이 방법 보닀 μ΅œμ„ μ˜ 방법을 찾지 λͺ»ν–ˆλ‹€.

κ·Έλž˜μ„œ κ²°κ΅­ μ§ˆλ¬Έν•˜κΈ°λ₯Ό 톡해 λ‹€λ₯Έ 해결책을 μ•Œκ²Œ λ˜μ—ˆλŠ”λ° 정말 μˆ˜ν•™μ„ μž˜ν•΄μ•Όκ² λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€..


μš°μ„  μ•„κΉŒ λ§ν•œ 3, 2, 2 λ₯Ό A, B, C 둜 μΉ˜ν™˜ ν•΄ 보자 κ·Έλ ‡λ‹€λ©΄ λ‚΄κ°€ κ΅¬ν•˜κ³  싢은 식은 A + B + C + AB + AC + BC + ABC κ°€ λœλ‹€.

이 식은 (A + 1) * (B + 1) * (C + 1) - 1 κ³Ό κ°™λ‹€. μ΄κ²ƒλ§Œ μ•Œμ•˜λ‹€λ©΄ λ¬Έμ œλŠ” 정말 μ‰¬μ›Œμ§„λ‹€.

from collections import Counter


def solution(clothes):
	answer = 1
	clothes_cnt = [val[1] for val in clothes]
	clothes_dict = dict(Counter(clothes_cnt))

	for val in clothes_dict.values():
		answer *= val + 1

	return answer - 1

κ²°κ΅­ μ’…λ₯˜ 별 옷의 개수λ₯Ό μ „λΆ€ 1 μ”© 더해쀀뒀, 값을 μ „λΆ€ κ³±ν•˜κ³ , 1을 λΉΌμ£Όλ©΄ 닡이 λœλ‹€.

정말 정말 μˆ˜ν•™μ  μ„ΌμŠ€λ₯Ό 많이 ν‚€μ›Œμ•Όκ² λ‹€λŠ” λŠλ‚Œμ„ 받은 λ¬Έμ œμ΄λ‹€ !!!


Categories:

Updated:

Leave a comment