🧠 리슀트(λ°°μ—΄) κ°œλ… 정리 & μ—°μŠ΅λ¬Έμ œ 풀이 (with Python)

2025. 7. 1. 11:44γ†πŸ“ μ½”λ”© ν…ŒμŠ€νŠΈ/Python

λ°˜μ‘ν˜•

πŸ” λ¦¬μŠ€νŠΈλž€?

리슀트(List)λŠ” μˆœμ„œκ°€ μžˆλŠ” λ°μ΄ν„°μ˜ μ§‘ν•©μž…λ‹ˆλ‹€.
νŒŒμ΄μ¬μ—μ„œλŠ” 리슀트λ₯Ό λ°°μ—΄μ²˜λŸΌ μ‚¬μš©ν•  수 있으며, μ›μ†Œλ₯Ό μΆ”κ°€/μ‚­μ œ/νƒμƒ‰ν•˜λŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“Œ μ˜ˆμ‹œ

L = ['Bob', 'Cat', 'Spam', 'Programmers']

Index Value

0 'Bob'
1 'Cat'
2 'Spam'
3 'Programmers'

πŸ“š 리슀트 기초 문법

1️⃣ μ›μ†Œ μ ‘κ·Ό

L[1]     # 'Cat'
L[-2]    # 'Spam'

2️⃣ μ›μ†Œ μΆ”κ°€ (append)

L.append('New')
# ['Bob', 'Cat', 'Spam', 'Programmers', 'New']

3️⃣ μ›μ†Œ μ‚­μ œ (pop, del)

L.pop()         # 'New' μ‚­μ œ ν›„ λ°˜ν™˜
del(L[2])       # 인덱슀 2 ('Spam') μ‚­μ œ

λ©”μ„œλ“œ νŠΉμ§•

pop() μ‚­μ œν•˜λ©΄μ„œ 값을 λ°˜ν™˜ν•¨
del μ‚­μ œλ§Œ μˆ˜ν–‰ν•¨, λ°˜ν™˜ μ—†μŒ

πŸ•’ 리슀트 μ—°μ‚° μ‹œκ°„ λ³΅μž‘λ„

μ—°μ‚° μ‹œκ°„ λ³΅μž‘λ„

append O(1) (μƒμˆ˜ μ‹œκ°„)
insert(i,x) O(n) (μ„ ν˜• μ‹œκ°„)
del(i) O(n) (μ„ ν˜• μ‹œκ°„)
index(x) O(n) (μ„ ν˜• μ‹œκ°„)

πŸ§ͺ μ—°μŠ΅λ¬Έμ œ 1

μ •λ ¬λœ λ¦¬μŠ€νŠΈμ— μ •μˆ˜ xλ₯Ό μ˜¬λ°”λ₯Έ μœ„μΉ˜μ— μ‚½μž…ν•˜λΌ

βœ… 문제 μ„€λͺ…

μ •μˆ˜λ‘œ 이루어진 μ˜€λ¦„μ°¨μˆœ 리슀트 Lκ³Ό μ •μˆ˜ xκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ,
xλ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜μ—¬ μ •λ ¬ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 리슀트λ₯Ό λ°˜ν™˜ν•˜μ‹œμ˜€.

πŸ”Ž μ˜ˆμ‹œ

L = [20, 37, 58, 72, 91]
x = 65
# λ°˜ν™˜: [20, 37, 58, 65, 72, 91]

πŸ’‘ 풀이 μ½”λ“œ

def solution(L, x):
    for i in range(len(L)):
        if x < L[i]:
            L.insert(i, x)
            return L
    L.append(x)  # xκ°€ κ°€μž₯ 큰 경우
    return L

πŸ§ͺ μ—°μŠ΅λ¬Έμ œ 2

리슀트 λ‚΄ x κ°’μ˜ 인덱슀 λͺ¨λ‘ λ°˜ν™˜

βœ… 문제 μ„€λͺ…

μž„μ˜μ˜ μ •μˆ˜ 리슀트 Lκ³Ό κ°’ xκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ,
xκ°€ λ‚˜νƒ€λ‚˜λŠ” λͺ¨λ“  인덱슀λ₯Ό 리슀트둜 λ°˜ν™˜ν•˜μ‹œμ˜€.
μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ [-1]을 λ°˜ν™˜ν•˜μ‹œμ˜€.

πŸ”Ž μ˜ˆμ‹œ

L = [64, 72, 83, 72, 54]
x = 72
# λ°˜ν™˜: [1, 3]

x = 49
# λ°˜ν™˜: [-1]

πŸ’‘ 풀이 μ½”λ“œ

def solution(L, x):
    result = []
    i = 0
    while i < len(L):
        try:
            idx = L.index(x, i)
            result.append(idx)
            i = idx + 1
        except:
            break
    if result == []:
        return [-1]
    return result

πŸ“ 마무리 정리

  • λ¦¬μŠ€νŠΈλŠ” νŒŒμ΄μ¬μ—μ„œ λ°°μ—΄μ²˜λŸΌ λ‹€λ£° 수 μžˆλŠ” 순차적 자료ꡬ쑰
  • μ‚½μž…/μ‚­μ œ/탐색 μ—°μ‚°μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ³ λ €ν•΄μ•Ό 효율적인 μ½”λ“œ μž‘μ„± κ°€λŠ₯
  • .insert(), .pop(), .index() λ“±μ˜ λ©”μ„œλ“œλŠ” κ°•λ ₯ν•˜μ§€λ§Œ λ•Œλ‘œλŠ” 반볡문과 쑰건문으둜 직접 κ΅¬ν˜„ν•˜λŠ” 것이 효율적일 수 있음

 

λ°˜μ‘ν˜•