[스택/큐] 프린터 (프로그래머스, Level 2) - retry

Soorim Yoon·2022년 9월 16일
0

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42587

  • 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 하는 함수를 작성해라.
  • 현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어진다.

풀이

추후 업로드 예정

코드

정답 코드

방법 1)

def solution(priorities, location):
    answer = 0
    # priorities 배열 안의 최댓값을 계속 갱신해가면서 location 요소와 동일한 값을 찾을 때까지 반복
    while True:
        max_num = max(priorities)
        for i in range(len(priorities)):
            if max_num == priorities[i]:    # 최댓 값과 리스트의 요소가 일치하면
                answer += 1     # 프린트 진행, 프린트한 순번을 저장
                # 우선순위가 큰 값부터 프린트하므로 프린트 순번은 1씩 증가시키면 됨
                priorities[i] = 0       # 출력한 값은 우선순위를 0으로 갱신
                max_num = max(priorities)       # 배열의 새로운 최댓값 갱신
                if i == location:   # i값이 찾는 값인 location과 같다면 정답 리턴
                    return answer

방법 2)

  • 큐를 사용하여 구현하는 방법

추후 업로드 예정

오류 코드

  • 아직 오류를 수정 중이다.
def solution(priorities, location):
    answer = 0
    
    wonder = priorities[location]     # 사용자가 출력 순서를 궁금해하는 출력물 값
    
    print_val = []      # 인쇄 순서 저장 배열
    # priorities 배열에서 위치한 배열 번호+1 값이 각 요소의 고유 번호로 지정함
    # 최종 인쇄할 순서를 저장하는데, 이 때 각 출력물의 고유 번호를 배열의 요소로 저장함
    count = 0
    start = 0   # 동일한 우선순위의 출력물이 있는 경우, 출력의 기준이 되는 시점

    for i in range(len(priorities)):
        max_val = max(priorities)
        
        if max_val == 0:
            break
        
        if priorities[i] == max_val:
            count += 1
        
        if count == 1:
            print_val.append(i+1)
            priorities[i] = 0
        else:
            # 최댓 값이 2개 이상인 경우, 앞선 최댓값의 바로 다음 값부터 배열 끝까지, 처음부터 최댓값의 앞 값까지 순서로 print_val 배열에 넣으려고 함 (근데 안됨)
            for j in range(start, len(priorities)):
                if max_val == priorities[j]:
                    print_val.append(j+1)
                    priorities[j] = 0
            for j in range(0, start):
                if max_val == priorities[j]:
                    print_val.append(j+1)
                    priorities[j] = 0
    
    for i in range(len(print_val)):
        if print_val[i] == wonder:
            answer = i + 1
            
    return answer

참고 : https://jinomadstory.tistory.com/17

profile
👩🏻‍💻 AI를 좋아하는 IT학부생 > 성장하는 2년차 개발자

0개의 댓글