프그스_스택큐_프린터 (큐)

RostoryT·2022년 5월 15일
0

Stack Queue

목록 보기
3/17




내가 짠 - 백준 동일 문제 정답 코드



내가 짠 - 히든 4개밖에 못맞춤

location의 인덱스는 0부터 시작이고, return(출력되는 값)의 인덱스는 1부터 시작

return = location이 2인 문서가 priorities에서 실제 출력 시 몇 번째로 출력되는가

''' 내가 푼 - 히든 4개밖에 못맞춤'''
from collections import deque

def solution(priorities, location):
    arr = [[i, 0] for i in priorities]    
    print_num = 1
    arr[location][1] = 9       # flag
    
    pri = deque(arr)
    
    while pri:
        tmp = pri.popleft()    # 일단 맨앞에 것 하나 뽑아둔다
        
        if not pri: return print_num + 1
        else: max_tmp = pri.index(max(pri))    # max값의 idx를 뽑아둔다   
        
        # 비교 후 max보다 작다면 끝으로 이동 및 삭제 대상 = max값
        if tmp[0] < pri[max_tmp][0]:  
            pri.append(tmp)
            rm_tmp = pri[max_tmp]
        else:                          # 작지않으면 삭제 대상 = 맨앞 값 
            rm_tmp = tmp
        
        # 삭제 대상의 Falg가 내가 찾는 값이라면 반복 끝, 출력순서 리턴
        if rm_tmp[1] == 9:
            return print_num
        else:                      # 아니라면 삭제만 하고 출력 순서 ++
            pri.remove(rm_tmp)
            print_num += 1
    
    return print_num
    
print(solution([2, 1, 3, 2], 2))
print(solution([1, 1, 9, 1, 1, 1], 0))


다른 사람 코드 - 히든 3개 틀림

''' 다른 사람 코드 - 히든 3개 틀림 '''
# priorities를 queue로 사용. 숫자를 dequeue하고
# 그것과 queue에 남은 값들 중 max value와 비교, 작으면 다시 enqueue, 크거나 같으면 print
# ** 큐에서 숫자를 하나씩 꺼낼 때마다 location -= 1
# ** 인쇄할 문서를 꺼내는 시점의 location은 0이 된다.
# 인쇄할 문서를 꺼내고 max value보다 크면 stop, 작으면 enqueue하고
# location을 현재 priorities의 길이와 같게 하기. 원하는 서류가 가장 마지막에 있으므로..
def solution(priorities, location):
    if len(priorities) == 1:
        return 1
    
    cnt = 1                        #예비 출력순서
    candidate = priorities.pop(0)  #맨앞 값 일단 뽑아
    
    while priorities:
        if location > 0:                      # 내가 찾을 문서가 맨앞이 아닐 경우
            if candidate < max(priorities):   # 어쨌든 맨 앞에 있는 애 크기 비교 후 
                priorities.append(candidate)  # max보다 작으면 뒤로 보내
            else:                             # max보다 크면 걔를 꺼내
                cnt += 1                      # 출력순서 +1
            location -= 1                     # 맨앞 사라졌으니 -1 (앞당겨짐)
        else:                                 # 내가 찾을 문서가 맨앞에 왔을 경우
            if candidate < max(priorities):   # 맨 앞이라도 max보다 작으면 맨뒤로
                priorities.append(candidate)
                location = len(priorities) - 1 # 내찾문이 맨앞에 있다가 맨뒤로 갔으니 loc도 변경
            else:
                break                          # 내찾문 맨앞 + 젤커 = 끝
                
        candidate = priorities.pop(0)          # pop은 여기서 (deque 안쓴 방법)

    # 인쇄할 숫자가 가장 마지막에 나왔을 경우 
    if not priorities:
        answer = len(priorities)
    else:
        answer = cnt
    return answer
profile
Do My Best

0개의 댓글