250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (μœ„μž₯) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (μœ„μž₯)

γ…… γ…œ γ…” γ…‡ 2022. 12. 21. 12:33
728x90

1. 문제 μ„€λͺ…

 

 

 

 

 

2. μ œν•œ 사항

  • clothes의 각 행은 [μ˜μƒμ˜ 이름, μ˜μƒμ˜ μ’…λ₯˜]둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • μŠ€νŒŒμ΄κ°€ 가진 μ˜μƒμ˜ μˆ˜λŠ” 1개 이상 30개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • 같은 이름을 가진 μ˜μƒμ€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • clothes의 λͺ¨λ“  μ›μ†ŒλŠ” λ¬Έμžμ—΄λ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“  λ¬Έμžμ—΄μ˜ κΈΈμ΄λŠ” 1 이상 20 μ΄ν•˜μΈ μžμ—°μˆ˜μ΄κ³  μ•ŒνŒŒλ²³ μ†Œλ¬Έμž λ˜λŠ” '_' 둜만 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • μŠ€νŒŒμ΄λŠ” ν•˜λ£¨μ— μ΅œμ†Œ ν•œ 개의 μ˜μƒμ€ μž…μŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 

3. λ‚΄ 풀이

from collections import defaultdict
def solution(clothes):
    answer = 1
    cloth_dict = defaultdict(int)
    for i in clothes:
        cloth_dict[i[1]] += 1
    
    for v in cloth_dict.values():
        answer = answer * (v+1)
    return answer-1

 

1. defaultdict의 μ΄ˆκΈ°κ°’μ„ int둜 μ„ μ–Έν•˜μ—¬ 같은 μ’…λ₯˜μ˜ 옷이 μ‘΄μž¬ν•˜λ©΄ +1

2. 옷 μ’…λ₯˜λ³„λ‘œ (같은 μ’…λ₯˜μ˜ 옷 쀑 ν•˜λ‚˜λ₯Ό 선택 + 아무것도 μ„ νƒν•˜μ§€ μ•ŠμŒ)을 곱함 -> nC1 + nC0

3. μ΅œμ†Œν•œ ν•˜λ‚˜ μ΄μƒμ˜ μ˜·μ„ μž…μ–΄μ•Ό ν•˜λ―€λ‘œ -1 (아무것도 μž…μ§€ μ•Šμ€ 경우λ₯Ό 빼쀌)

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

def solution(clothes):
    from collections import Counter
    from functools import reduce
    cnt = Counter([kind for name, kind in clothes])
    answer = reduce(lambda x, y: x*(y+1), cnt.values(), 1) - 1
    return answer

 

1. Counter() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ μ’…λ₯˜λ³„ 옷의 개수λ₯Ό 카운트

2. reduce() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ 옷의 개수 +1 의 λˆ„μ  곱을 ꡬ함

3. μ΅œμ’… κ°œμˆ˜μ—μ„œ -1 ν•΄μ„œ 리턴 (아무것도 μž…μ§€ μ•Šμ€ 경우 제거)

 

 

import collections
from functools import reduce

def solution(c):
    return reduce(lambda x,y:x*y,[a+1 for a in collections.Counter([x[1] for x in c]).values()])-1

 

 

728x90
Comments