8월 1주차 - syh39/ProblemSolving GitHub Wiki

표 편집

def solution(n, k, cmd):    
    cur = k    
    table = { i:[i - 1, i + 1] for i in range(n) }    
    answer = ['O'] * n    
    table[0] = [None, 1]    
    table[n - 1] = [n - 2, None]    
    stack = []    
    for c in cmd:        
        if c == "C":            
            # 삭제            
            answer[cur] = 'X'            
            prev, next = table[cur]            
            stack.append([prev, cur, next])            
            if next == None:                
                cur = table[cur][0]            
            else:                
                cur = table[cur][1]  
                
            if prev == None:                
                table[next][0] = None            
            elif next == None:                
                table[prev][1] = None            
            else:                
                table[prev][1] = next                
                table[next][0] = prev     
                
        elif c == "Z":           
            # 복구            
            prev, now, next = stack.pop()            
            answer[now] = 'O'            
            if prev == None:                
                table[next][0] = now            
            elif next == None:                
                table[prev][1] = now            
            else:                
                table[next][0] = now               
                table[prev][1] = now         
        else:           
                # 커서 이동            
                c1, c2 = c.split()           
                c2 = int(c2)            
                if c1 == 'D':                
                    for _ in range(c2):                    
                        cur = table[cur][1]            
                else:                
                    for _ in range(c2):                   
                        cur = table[cur][0]    
                        
    return ''.join(answer)

프린터

  • 출처: 스택/큐
  • 난이도 : Level 2
  • 풀이 여부 : Y
  • 소요 시간 : 20분
  • 유형 : Priority Queue
def solution(priorities, location):
    prior = [(p, i) for i, p in enumerate(priorities)]
    cnt = 0
    
    while True:
        maximum, _ = max(prior)
        p, i = prior.pop(0)
        if p == maximum:
            cnt += 1
            if i == location:
                return cnt
        else:
            prior.append((p, i))