πŸ“Œ 파이썬 μœΌλ‘œ 풀이

 

πŸ“Œ λ¬Έμ œ 링크 :

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ λ§€μΉ­. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 λ§€μΉ­ λ°›μœΌμ„Έμš”.

programmers.co.kr

 

πŸ“Œ λ¬Έμ œ μ„€λͺ… :

ν•œκ΅­μ€‘ν•™κ΅μ— λ‹€λ‹ˆλŠ” 학생듀은 각자 μ •μˆ˜ 번호λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 학ꡐ 학생 3λͺ…μ˜ μ •μˆ˜ 번호λ₯Ό λ”ν–ˆμ„ λ•Œ 0이 되면 3λͺ…μ˜ 학생은 삼총사라고 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 5λͺ…μ˜ 학생이 있고, 각각의 μ •μˆ˜ λ²ˆν˜Έκ°€ μˆœμ„œλŒ€λ‘œ -2, 3, 0, 2, -5일 λ•Œ, 첫 번째, μ„Έ 번째, λ„€ 번째 ν•™μƒμ˜ μ •μˆ˜ 번호λ₯Ό λ”ν•˜λ©΄ 0μ΄λ―€λ‘œ μ„Έ 학생은 μ‚Όμ΄μ‚¬μž…λ‹ˆλ‹€. λ˜ν•œ, 두 번째, λ„€ 번째, λ‹€μ„― 번째 ν•™μƒμ˜ μ •μˆ˜ 번호λ₯Ό 더해도 0μ΄λ―€λ‘œ μ„Έ 학생도 μ‚Όμ΄μ‚¬μž…λ‹ˆλ‹€. λ”°λΌμ„œ 이 경우 ν•œκ΅­μ€‘ν•™κ΅μ—μ„œλŠ” 두 κ°€μ§€ λ°©λ²•μœΌλ‘œ 삼총사λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•œκ΅­μ€‘ν•™κ΅ ν•™μƒλ“€μ˜ 번호λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ numberκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 학생듀 쀑 삼총사λ₯Ό λ§Œλ“€ 수 μžˆλŠ” λ°©λ²•μ˜ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

 

πŸ“Œ μ œν•œ 사항

  • 3 ≤ number의 길이 ≤ 13
  • -1,000 ≤ number의 각 μ›μ†Œ ≤ 1,000
  • μ„œλ‘œ λ‹€λ₯Έ ν•™μƒμ˜ μ •μˆ˜ λ²ˆν˜Έκ°€ 같을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

πŸ“Œ μž…μΆœλ ₯ 예


μΆ”μΈ‘) 

for문을 돌렀 λͺ¨λ“  경우의 수λ₯Ό λΉ„κ΅ν•˜λŠ” 방법이 λ‚˜μ„κΉŒ (3쀑포문이 κ±Έμ–΄μ•Ό ν• λ“―ν•œλ° 3쀑포문 ν”Όν•  수 μžˆλŠ” 방법 μ—†λ‚˜)

 

 

 

μ†ŒμŠ€μ½”λ“œ) 

* 1μ°¨) 성곡 : 일단 3쀑 포문으둜 확인 λ‹€λ₯Έ 방법도 생각해 보자

def solution(number):
    cnt = 0
    for i in range(len(number)):
        for x in range(i+1,len(number)):
            for y in range(x+1,len(number)) :
                if (number[i] + number[x] + number[y]) == 0 :
                    cnt += 1

    return cnt

* 2μ°¨) 성곡 : 파이썬 λͺ¨λ“ˆ μ‚¬μš©ν•΄λ³΄κΈ°

# μžμ‹ λ§Œμ˜ 반볡자λ₯Ό λ§Œλ“œλŠ” λͺ¨λ“ˆ, 반볡 μš”μ†Œμ— λŒ€ν•œ μ²˜λ¦¬λ‚˜ νŠΉμ • 배열에 μˆœμ—΄μ΄λ‚˜ 쑰합을 λ§Œλ“€μ–΄μ•Όν•  λ•Œ 유용
import itertools

def solution(number):
    cnt = 0
    # 맀개인자둜 λ°°μ—΄κ³Ό 갯수 λ„£μœΌλ©΄ ν•΄λ‹Ή 개수둜된 λͺ¨λ“  νŠœν”Œ 쑰합을 λ§Œλ“ λ‹€
    data = list(itertools.combinations(number, 3))
    for one in data:
        if sum(one) == 0 : # ν—‰, νŒŒμ΄μ¬μ€ list도 κ·Έλ ‡κ³  νŠœν”Œλ„ κ·Έλ ‡κ³  sum ν•¨μˆ˜μ— λ„£μ–΄μ£Όλ©΄ 합이 λ‚˜μ˜΄ μ‹ κΈ°
            cnt += 1

    return cnt

* 3μ°¨)

 

 

리뷰) 

3μ€‘ν¬λ¬ΈμœΌλ‘œ ν’€μ—ˆλ˜ κ±°λ₯Ό λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ ν’€ 수 μžˆλŠ” 방법에 λŒ€ν•΄ κ³΅λΆ€ν–ˆλ‹€.

일단 파이썬의 κΈ°λ³Έ 라이브러리인 itertools의 combination을 μ‚¬μš©ν•΄ λ¦¬μŠ€νŠΈμ— μžˆλŠ” λͺ¨λ“  쑰합을 κ΅¬ν•˜λŠ” κ±Έ κ°„λ‹¨νžˆ λͺ¨λ“ˆλ‘œ λŒ€μ²΄ν•˜λŠ” 방법

λ‹€λ₯Έ μ‚¬λžŒ 풀이λ₯Ό λ³΄λ‹ˆκΉŒ DFS둜 ν‘ΈλŠ” 방법도 μžˆμ—ˆλ‹€ 이건 λ‚˜μ€‘μ— κ³΅λΆ€ν•΄λ³΄λŠ” 걸둜

+ Recent posts