λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/Programmers

[Programmers] μ†Œμˆ˜ λ§Œλ“€κΈ°

 

 

문제 

 

주어진 숫자 쀑 3개의 수λ₯Ό λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μˆ«μžλ“€μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ numsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, nums에 μžˆλŠ” μˆ«μžλ“€ 쀑 μ„œλ‘œ λ‹€λ₯Έ 3개λ₯Ό 골라 λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.μ œν•œμ‚¬ν•­

 

 

 

μ œν•œ 사항

 

  • nums에 λ“€μ–΄μžˆλŠ” 숫자의 κ°œμˆ˜λŠ” 3개 이상 50개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • nums의 각 μ›μ†ŒλŠ” 1 이상 1,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ©°, μ€‘λ³΅λœ μˆ«μžκ°€ λ“€μ–΄μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

λ‚˜μ˜ μ½”λ“œ 

 

def solution(nums):
    cnt = 0
    arr = []
    
    # 숫자 μ„Έ 개λ₯Ό λ”ν•΄μ„œ λ‚˜μ˜¬ 수 μžˆλŠ” λͺ¨λ“  경우의 수λ₯Ό 담은 λ°°μ—΄ λ§Œλ“€κΈ° 
    for i in range(len(nums)):
        for t in range(i+1,len(nums)):
            for k in range(t+1,len(nums)):
                p = nums[i] + nums[t] + nums[k] 
                arr.append(p)
    
    # 1 ~ μžκΈ°μžμ‹ κΉŒμ§€μ˜ 수λ₯Ό λ‚˜λˆŒ λ•Œ κ·Έ νšŸμˆ˜κ°€ 2인 κ²½μš°μ—λŠ” μ†Œμˆ˜μ΄κΈ°μ— cntλ₯Ό μ¦κ°€μ‹œν‚΄
    for y in arr:
        idx = 0
        for z in range(1,y+1):
            if y % z == 0:
                idx += 1
        
        if idx == 2:
            cnt += 1
                   
    return cnt
뢄석 > μ„Έ 수λ₯Ό λ”ν•΄μ„œ λ‚˜μ˜¬ 수 μžˆλŠ” λͺ¨λ“  경우의 μˆ˜μ—μ„œ μ†Œμˆ˜λ₯Ό νŒλ³„ν•˜λŠ” λΆ€λΆ„μ—μ„œ 어렀움을 κ²ͺμ—ˆλ‹€. ν•˜μ§€λ§Œ μƒκ°ν•΄λ³΄λ‹ˆ μ†Œμˆ˜λž€ 자기 μžμ‹ κ³Ό 1둜만 λ‚˜λˆŒ 수 μžˆλŠ” μˆ˜λΌλŠ” μ •μ˜λ₯Ό ν™œμš©ν•΄μ„œ λ‚˜λˆŒ 수 μžˆλŠ” νšŸμˆ˜κ°€ 2인 경우만 λ”°λ‘œ κ·Έ 횟수λ₯Ό ꡬ해주면 μ†Œμˆ˜μ˜ 개수λ₯Ό ꡬ할 수 μžˆλŠ” κ²ƒμ΄μ—ˆλ‹€. 

 

 

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ†Œμˆ˜ λ§Œλ“€κΈ°

주어진 숫자 쀑 3개의 수λ₯Ό λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μˆ«μžλ“€μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ numsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, nums에 μžˆλŠ” μˆ«μžλ“€ 쀑 μ„œλ‘œ λ‹€λ₯Έ 3개λ₯Ό 골라 λ”ν–ˆμ„ λ•Œ

programmers.co.kr