λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
개발/π™‹π™§π™€π™œπ™§π™–π™’π™’π™šπ™§π™¨

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ '졜고의 μ§‘ν•©' 파이썬 풀이

by beomcoder 2023. 2. 22.
728x90
λ°˜μ‘ν˜•
 

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

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

programmers.co.kr

"""
μžμ—°μˆ˜ n 개둜 이루어진 쀑볡 μ§‘ν•©(multi set, νŽΈμ˜μƒ μ΄ν›„μ—λŠ” "μ§‘ν•©"으둜 톡칭) 쀑에 
λ‹€μŒ 두 쑰건을 λ§Œμ‘±ν•˜λŠ” 집합을 졜고의 집합이라고 ν•©λ‹ˆλ‹€.

1. 각 μ›μ†Œμ˜ 합이 Sκ°€ λ˜λŠ” 수의 μ§‘ν•©
2. μœ„ 쑰건을 λ§Œμ‘±ν•˜λ©΄μ„œ 각 μ›μ†Œμ˜ κ³± 이 μ΅œλŒ€κ°€ λ˜λŠ” μ§‘ν•©

예λ₯Ό λ“€μ–΄μ„œ μžμ—°μˆ˜ 2개둜 이루어진 μ§‘ν•© 쀑 합이 9κ°€ λ˜λŠ” 집합은 λ‹€μŒκ³Ό 같이 4κ°œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
{ 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 }
그쀑 각 μ›μ†Œμ˜ 곱이 μ΅œλŒ€μΈ { 4, 5 }κ°€ 졜고의 μ§‘ν•©μž…λ‹ˆλ‹€.

μ§‘ν•©μ˜ μ›μ†Œμ˜ 개수 nκ³Ό λͺ¨λ“  μ›μ†Œλ“€μ˜ ν•© sκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 
졜고의 집합을 return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.
"""

def solution(n, s):
    if n>s:
        return [-1]
    
    share = s//n
    remainder = s%n
    
    return sorted([share + 1 if (remainder:= remainder-1)>=0 else share for _ in range(n)])

"""
κ°€μž₯ 곱이 컀지렀면 κ³±λ“€μ˜ 값이 κ· λ“±ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν–ˆλ‹€.
n=2, s=17을 예둜 λ“€λ©΄ 1x16보닀 8x9κ°€ 더 크닀.
n=3, s=19λ₯Ό 예둜 λ“€λ©΄ 1x1x17, 2x2x15보닀 6x6x7이 더 크닀.

κ·Έλž˜μ„œ μƒκ°ν•œ 방식이 sλ₯Ό n으둜 λ‚˜λˆ  λͺ«λ§ŒνΌ λ¦¬μŠ€νŠΈμ— λ„£κ³ 
λ‚˜λ¨Έμ§€λ§ŒνΌ ν•œ μ›μ†Œλ§ˆλ‹€ 1을 λ”ν•΄μ£ΌλŠ” κ²ƒμ΄μ˜€λ‹€.
n=2, s=17 -> 17//2 = 8, 17%2 = 1이닀. [8, 8+1]
n=3, s=19 -> 19//3 = 6, 19%3 = 1이닀. [6, 6, 6+1]

μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ°°μΉ˜ν•΄μ•Όν•΄μ„œ sortλ₯Ό ν•˜μ˜€κ³ 
remainderμ—μ„œ 1을 λΉΌμ€€ λ’€ κ·Έ remainder와 0을 λΉ„κ΅ν•˜μ—¬ 아직 λ‚˜λ¨Έμ§€κ°€ λ‚¨μ•„μžˆμœΌλ©΄
λͺ«μ— 1을 λ”ν•΄μ„œ 값을 λ„£μ–΄μ£Όμ—ˆκ³  λ‚˜λ¨Έμ§€κ°€ μ—†μœΌλ©΄ 1을 더해주지 μ•ŠλŠ” shareκ°’λ§Œ λ„£μ–΄μ£Όμ—ˆλ‹€.
"""
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€