Algorithm/Programmers

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 폰켓λͺ¬ (level 1)

감자 πŸ₯” 2021. 8. 18. 16:05
λ°˜μ‘ν˜•

 

문제링크

https://programmers.co.kr/learn/courses/30/lessons/1845

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 폰켓λͺ¬

당신은 폰켓λͺ¬μ„ 작기 μœ„ν•œ 였랜 μ—¬ν–‰ 끝에, 홍 λ°•μ‚¬λ‹˜μ˜ 연ꡬ싀에 λ„μ°©ν–ˆμŠ΅λ‹ˆλ‹€. 홍 λ°•μ‚¬λ‹˜μ€ λ‹Ήμ‹ μ—κ²Œ μžμ‹ μ˜ 연ꡬ싀에 μžˆλŠ” 총 N 마리의 폰켓λͺ¬ μ€‘μ—μ„œ N/2마리λ₯Ό 가져가도 μ’‹λ‹€κ³  ν–ˆμŠ΅λ‹ˆλ‹€.

programmers.co.kr

 

λ‚˜μ˜ 풀이

  1. 폰켓λͺ¬μ˜ μ€‘λ³΅λ˜λŠ” 값을 μ—†μ• μ€€ ν›„ 갯수λ₯Ό μ„Έμ–΄μ€€λ‹€.
  2. μ΅œμ’… nκ°œμ—μ„œ n/2개의 폰켓λͺ¬μ„ κ°€μ Έκ°ˆ 수 μžˆμœΌλ‹ˆ, n/2 값을 ꡬ해쀀닀.
  3. μœ„μ˜ 두 값을 λΉ„κ΅ν•˜μ—¬ λͺ‡ μ’…λ₯˜λ₯Ό κ°€μ Έκ°ˆ 수 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³Έλ‹€.
def solution(nums):
    have = len(nums)/2
    total = set(nums)
    total_len = len(total)
    if have > total_len:
        answer = total_len
    else:
        answer = have
    return answer

 

 

λ‹€λ₯Έμ‚¬λžŒν’€μ΄

κ·Έλƒ₯ min 연산을 μ΄μš©ν•΄μ„œ ν‘Ό 방법이 μ—­λŒ€κΈ‰μœΌλ‘œ κ°„λ‹¨ν–ˆλ‹€.

def solution(ls):
    return min(len(ls)/2, len(set(ls)))

사싀 λœ―μ–΄λ³΄λ©΄ λ‚΄κ°€ κ΅¬ν•œ λ°©ν–₯κ³Ό 같은 λ°©ν–₯이닀. 해당방법은 λ³€μˆ˜μ„€μ •λ„ ν•˜μ§€μ•Šμ•„μ„œ λ©”λͺ¨λ¦¬ 효율이 더 쒋을 것이고 μ½”λ“œκ°€ 길지 μ•Šμ•„ μ‹œκ°„λ³΅μž‘λ„λ„ 쒋을 것이닀. λ‚˜λ„ if문을 μ‚¬μš©ν•΄μ„œ μž‘μ€κ°’μ„ κ³¨λΌλ‚΄λŠ” 방법이 μ•„λ‹Œ min을 μ‚¬μš©ν•΄μ„œ λ³€μˆ˜ ν• λ‹ΉλŸ‰λ„ 쀄이고, if문을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 방법을 자주 μ΄μš©ν•΄λ³΄μ•„μ•Ό κ² λ‹€.

λ°˜μ‘ν˜•