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

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ νƒμš•λ²•(greedy) '체윑볡' 파이썬 풀이

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

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

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

programmers.co.kr

"""
μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. 
λ‹€ν–‰νžˆ μ—¬λ²Œ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주렀 ν•©λ‹ˆλ‹€. 
ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ 
λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 

체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 
μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.
전체 ν•™μƒμ˜ 수 n, μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ lost, 
μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ reserveκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ,
μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.
"""

def solution(n, lost, reserve):
    student = [1 for _ in range(n)]
    for l in lost:
        student[l-1] -= 1
    for r in reserve:
        student[r-1] += 1
    student = [1] + student + [1]
    
    for i in range(1, n+1):
        if student[i] == 2:
            if student[i-1] == 0:
                student[i-1] = 1
                student[i] = 1
            elif student[i+1] == 0:
                student[i+1] = 1
                student[i] = 1
    return n - student.count(0)
    
"""
μ΅œλŒ€ν•œ μ§κ΄€μ μœΌλ‘œ 풀어보렀고 ν–ˆλ‹€. 
λ¨Όμ € studentλŠ” μ „λΆ€ 체윑볡이 1λ²Œμ”© μžˆλ‹€κ³  κ°€μ •ν–ˆλ‹€.
그리고 μžƒμ–΄λ²„λ¦° μ‚¬λžŒκ³Ό 여뢄이 μžˆλŠ” μ‚¬λžŒμ€ -1, +1을 각각 ν•΄μ£Όμ—ˆλ‹€.

κ·Έλ‹€μŒ λ‘œμ§μ—μ„œ ν•™μƒμ˜ μ•žκ³Ό λ’€λ₯Ό ν™•μΈν•˜λŠ” κ²ƒμœΌλ‘œ μ§°κΈ° λ•Œλ¬Έμ—
첫번째 μ‚¬λžŒ μ•žμ— μž„μ˜λ‘œ 1, λ§ˆμ§€λ§‰ μ‚¬λžŒ 뒀에 μž„μ˜λ‘œ 1을 λ„£μ–΄μ£Όμ—ˆλ‹€.

그리고 for문을 λŒλ©΄μ„œ κ·Έ 학생이 μ—¬λΆ„μ˜ 체윑볡이 μžˆμ„λ•Œ
μ•žμ‚¬λžŒκ³Ό λ’·μ‚¬λžŒμ΄ 체윑볡이 없을 경우 λ‚˜λˆ μ€€λ‹€.

μ•žμ‚¬λžŒμ„ λ¨Όμ € ν™•μΈν•˜λŠ” μ΄μœ λŠ” λ’·μ‚¬λžŒμ€ κ·Έ λ‹€μŒμ‚¬λžŒμ΄ μ€„μˆ˜λ„ 있기 λ•Œλ¬Έμ΄λ‹€.
그리고 μ „μ²΄ν•™μƒμˆ˜ nμ—μ„œ 체윑볡이 μ—†λŠ” 0을 λΉΌμ£Όλ©΄ μ΅œλŒ€ μ‚¬λžŒμˆ˜κ°€ λ‚˜μ˜¨λ‹€.
"""
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€