Algorithm/Baekjoon

[python3] μ΄μ½”ν…Œ - λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘ (ch.11 그리디 - μœ ν˜•λ³„ 기좜문제)

감자 πŸ₯” 2021. 6. 23. 18:40
λ°˜μ‘ν˜•

μ°Έκ³ ) μ΄κ²ƒμ΄ 취업을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈλ‹€ with 파이썬 μ±…을 기반으둜 μž‘μ„±λœ λ¬Έμ œμ™€ μ½”λ“œμž…λ‹ˆλ‹€. 
λ”°λΌμ„œ λ¬Έμ œλŠ” μžμ„Έν•˜κ²Œ 적지 μ•Šκ³ , κ°„λ‹¨ν•œ μ„€λͺ…κ³Ό 제 μ½”λ“œλ§Œ μ˜¬λ¦¬κ² μŠ΅λ‹ˆλ‹€.

 

λ§Œλ“€ 수 μ—†λŠ” κΈˆμ•‘ (ebookκΈ°μ€€ p.513)

- N개의 λ™μ „
- N개의 λ™μ „μœΌλ‘œ λ§Œλ“€ μˆ˜ μ—†λŠ” μ–‘μ˜ μ •μˆ˜ κΈˆμ•‘ μ€‘ μ΅œμ†Ÿκ°’μ„κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν•˜μ‹œμ˜€

##### μž…λ ₯쑰건
- μ²«μ¨‹μ€„ λ™μ „μ˜ κ°―수 N개 (1 <= N <= 1000 )
- λ‘˜μ¨‹μ€„, ν™”νμ˜ λ‹¨μœ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” N개의 μžμ—°μˆ˜.ν™”νŽ˜μ˜ λ‹¨μœ„λŠ” 1000000μ΄ν•˜μ˜ μžμ—°μˆ˜

<1μ°¨μ‹œλ„ λ¬Έμ œν’€μ΄>

μš°μ„  그리디 λ¬Έμ œν’€μ΄μ— λŒ€ν•œ κ²½ν—˜κ³Ό λ…Έν•˜μš°κ°€ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μ–΄λ–»κ²Œλ“  ν’€μ–΄λ³΄μž ν•˜κ³ , for문으둜 λ•Œλ €λ°•μ•˜λ‹€.
일단, 생각해낸 것은, 'μ΅œμ†Ÿκ°’'을 κ΅¬ν•˜λŠ” 것이기 λ•Œλ¬Έμ— 숫자 λ‘κ°œλ‘œ λ”ν•΄μ„œ λ‚˜μ˜€λŠ” μˆ«μžλ“€λ§Œ λΉ„κ΅ν•˜λ©΄ λ˜μ§€μ•Šμ„κΉŒ? μ˜€λ‹€. ν•˜μ§€λ§Œ, μ‹œκ°„μ˜ μ œν•œμ΄ μžˆλŠ” μ½”λ”©ν…ŒμŠ€νŠΈ νŠΉμ„±μƒ μ—­μ‹œ λ‚΄ μ½”λ“œλŠ” μ œν•œμ‹œκ°„ 1초 λ‚΄λ‘œ λŒμ•„κ°€μ§€ μ•Šκ³  맀우맀우 λŠλ €μ„œ 좜λ ₯μ‘°μ°¨ μ•ˆλ˜λŠ” μ½”λ“œκ°€ λ˜μ–΄λ²„λ Έλ‹€. .. γ…‹γ…‹γ…‹γ…‹ μ‹œκ°„λ³΅μž‘λ„ κ³ λ € μ•ˆν•˜λŠ” ν•˜λ“œμ½”λ”© μ „λ¬Έκ°€λ„€ λ‚˜...

n = int(input())
money_type = list(map(int, input().split()))

def solution(n, money_type):
    
    result = []
    for i in range(0, n):
        for j in range(i+1, n):
            price = money_type[i] + money_type[j]
            result.append(price)
    result.sort()
    
    while True:
        for i in range(1, 10000000):
            if i in result:
                pass
            else:
                answer = i
                break
    return answer

solution(n, money_type)

 

<2μ°¨μ‹œλ„ λ¬Έμ œν’€μ΄ : μ •λ‹΅μ½”λ“œ>

##### greedy TIP!!
1. μ΅œμ†Ÿκ°’을 κ΅¬ν•˜λŠ” λ¬Έμ œλŠ” λ¬΄μ‘°κ±΄ for문을 λŒλ¦΄κ²Œ μ•„λ‹ˆλΌ, μ˜€λ¦„ μ°¨μˆœμœΌλ‘œ λ‘κ³  μž‘은 κ²ƒλΆ€ν„° λΉ„κ΅ν•΄κ°€λ©΄μ„œ ν’€μ–΄μ•Όν•œλ‹€.
2. λˆ„적합과 ν™”νλ‹¨μœ„λ₯Ό λΉ„κ΅ν•΄κ°€λ©΄μ„œ κ΅¬ν•΄λ³Έλ‹€. ν™”νλ‹¨μœ„κ°€ λˆ„적합 λ³΄λ‹€ ν΄ κ²½μš°, κ·Έ μ‚¬μ΄μ— κ°­μ΄ μ‘΄μž¬ν•œλ‹€λŠ” λœ»μ΄λ‹€.

λˆ„μ ν•©μ„ for문으둜 μ°¨κ·Όμ°¨κ·Ό κ΅¬ν•΄λ‚˜κ°€λ©΄μ„œ, 숫자 1λΆ€ν„° 비ꡐ해 λ‚˜κ°„λ‹€λŠ” 것이 ν¬μΈνŠΈμ˜€λ‹€. λˆ„μ ν•©λ³΄λ‹€ ν™”νλ‹¨μœ„κ°€ 클 κ²½μš°μ— κ·Έ 사이에 λ§Œλ“€ 수 μ—†λŠ” μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€λŠ” λœ»μž„μ„ 항상 κΈ°μ–΅ν•˜κ³  λ‹€μŒ 그리디 λ¬Έμ œμ—μ„œλŠ” κΌ­ μ μš©ν•΄μ„œ 풀어봐야겠닀.

n = int(input())
money_type = list(map(int, input().split()))


def solution(n, money_type):
    money_type.sort()
    result = 1
    
    for money in money_type:
        if result < money:
            break
        result += money
    
    return result

solution(n, money_type)
λ°˜μ‘ν˜•