λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€/Python] Level2 - νƒλ°°μƒμž

 πŸ’¬ 문제




 

πŸ”¨ μž…μΆœλ ₯ 예

  

 

 



πŸ’‘ ν•΄κ²°

큐와 μŠ€νƒμ„ μ‚¬μš©ν•˜λŠ” 자료ꡬ쑰 문제둜 λ„ˆλ¬΄ μ§κ΄€μ μ΄μ—ˆλ‹€. μ²˜μŒμ— 큐λ₯Ό 써야 될까? λΌλŠ” 생각이 λ“€μ—ˆμ§€λ§Œ μ§κ΄€μ μœΌλ‘œ 큐와 μŠ€νƒμ„ μ‚¬μš©ν•˜μ—¬ ν’€κΈ°λ‘œ ν•˜μ˜€λ‹€.


from collections import deque

def solution(order):
    n = len(order)
    now = 0
    arr = deque()
    stack = []
    result = 0
    
    for i in range(n):
        arr.append(i+1)
    
    while True:
        if len(arr) == 0 and (len(stack) ==0 or stack[-1] != order[now]):
            return result
        
        if len(arr) >0:
            tmp = arr[0]
        else:
            tmp = -1
        
        if tmp == order[now]:
            arr.popleft()
            now+=1
            result+=1 
        elif len(stack) !=0 and stack[-1] == order[now]:
            stack.pop()
            now+=1
            result+=1
        else:
            arr.popleft()
            stack.append(tmp)



κ·Έλ ‡κ²Œ μ§κ΄€μ μœΌλ‘œ ν‘Ό μ½”λ“œμ΄λ‹€. λ¬Έμ œμ—μ„œ 보내쀀 μ œν•œ 쑰건을 따라가며, 갈 수 μžˆλŠ” λ°©ν–₯은 총 3κ°œμ΄λ‹€.

1. μ»¨ν…Œμ΄λ„ˆμ—μ„œ 배솑지

2. μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ„œλΈŒμ»¨ν…Œμ΄λ„ˆ(μŠ€νƒ)

3. μ„œλΈŒ μ»¨ν…Œμ΄λ„ˆ(μŠ€νƒ)μ—μ„œ 배솑지

 

μ΄λ ‡κ²Œ μ œν•œμ‘°κ±΄μ΄ 밑에 3κ°œλ“€μ΄κ³ , κ·Έ μœ„μ—λŠ” νƒˆμΆœ 쑰건듀이닀. 그런데, 사싀 3λ²ˆμΈκ°€ ν…ŒμΌ€λ₯Ό ν‹€λ Έμ—ˆλ‹€.

list out of bound μ—λŸ¬κ°€ 많이 λ–΄μ—ˆκ³ ,  맨 μœ„ νƒˆμΆœ 쑰건을 3λ²ˆμ΄λ‚˜ κ³ μ³€λ‹€. μ•ˆμ’‹μ€ μ½”λ“œμΈκ±°λ‹€.

μ–΄λ–»κ²Œλ“  λ§žμΆ”κΈ΄ ν–ˆλŠ”λ°, 훨씬 더 쀄일 수 μžˆμ„κ±° 같은데 쒋은 방법이 생각이 μ•ˆλ‚˜ λ‹€λ₯Έμ‚¬λžŒλ“€μ˜ μ½”λ“œλ₯Ό λ³΄μ•˜λ‹€.

 

큐λ₯Ό μ“°μ§€ μ•Šκ³ , 인덱슀λ₯Ό μ΄μš©ν•˜μ—¬ ν’€λ©΄ μ‹œκ°„μ„ 더 쀄일 수 μžˆμ—ˆκ³ ,

μ»¨ν…Œμ΄λ„ˆμ—μ„œ λ°°μ†‘μ§€λ‘œ λ°”λ‘œ κ°€λŠ” 것을 μŠ€νƒμ„ 거쳐 κ°„λ‹€λ©΄ 1,2,3 μ€‘μ—μ„œ 1,2λ₯Ό μ—†μ• κ³  3만 λ³Ό 수 μžˆμ—ˆλ‹€.(λ˜‘λ˜‘ν•œ μ‚¬λžŒλ“€)

 

κ·Έλ ‡κ²Œ 밑이 μ΅œμ’… μ½”λ“œμ΄λ‹€.



πŸ‘¨πŸ»‍πŸ’»  CODE
 



def solution(order):
    answer = 0
    stack = []
    idx=1 
    
    while idx != len(order)+1:
        stack.append(idx)
        while stack[-1] == order[answer]:
            answer += 1
            stack.pop()
            if len(stack) == 0:
                break
        idx += 1
    return answer


 

 


πŸ’ͺ🏻 λŠλ‚€μ 

 

μ €λŸ° ꡬ상을 λ‚΄κ°€ μ½”ν…Œλ•Œ ν•  수 μžˆμ„κΉŒ κ±±μ •λœλ‹€.