프로그래머스-프린터(파이썬, python)

SA Jung·2022년 10월 1일
0

Programmers 문제 풀이

목록 보기
7/14

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

git 바로가기

1. idx 수동 증가 및 판별

def solution(priorities, location):
    answer = 0
    # idx_list만들기
    idx_list =[]
    for idx in range(len(priorities)):
        idx_list.append(idx)
    priorities_copy = priorities.copy()
    idx = 0
    while idx < len(priorities)-1:
        if priorities_copy[idx] < max(priorities_copy[idx+1:]):
            idx_list.append(idx_list.pop(idx))
            priorities_copy.append(priorities_copy.pop(idx))
        else:
            idx+=1
    answer = idx_list.index(location)+1
    return answer

solution(priorities, location)
  • 내가 짜서 내가 제출하고 통과를 했다지만 코드가 참 가독성이 없다....
  • 단순한 아이디어로 idx를 0부터 순차적으로 증가해가면서 다음idx부터 최대값이 있는지 확인하고 현재 idx의 value값이 최대값이 아니라면 제일 뒤에 다시 append하고, 현재 idx의 value값이 최대값이면 idx를 1증가시키고 location을 확인하는 구조이다.

2. Queue 개선과 ldx와 location 확인방법 및 생성 방법 개선

def solution(priorities, location):
    answer = 0
    queue = [[i, p] for i, p in enumerate(priorities)]
    max_prioty = max(priorities)
    while True:
        cur = queue.pop(0)
        # 값이 가장 클 때
        if cur[1] == max_prioty:
            answer += 1
            # max값 재설정
            priorities.remove(max_prioty)
            if len(priorities) != 0:
                max_prioty = max(priorities)
            # location 확인
            if cur[0] == location:
                return answer
        # 큰 값이 아닐 때
        else:
            queue.append(cur)
  • 완벽한 정답이라고 할 수는 없지만, Queue를 적극 활용하여 알고리즘을 개선해보려고 노력했다.
  • 리스트 컴프리헨션과 enumerate 내장함수를 이용해서 단, 한줄로 깔끔하게 [idx,value] 형태로 queue를 만들었다.
priorities = [1, 1, 9, 1, 1, 1]
queue = [[i, p] for i, p in enumerate(priorities)]
 # [[0, 1], [1, 1], [2, 9], [3, 1], [4, 1], [5, 1]]
  • while문 진입 전에 최대값을 확인하고, pop(0)을 이용해 최대값의 여부를 파악한다.
  • cur[1]의 값이 최대값이면 answer을 1증가시키고 priorities 목록에서 제거를 해버린다. 그리고 아직 priorities가 있다면 그 중에 max값을 또 찾는다.
  • 또한 answer을 1증가시키고, cur[0]=idx와 location의 값이 같다면 현재의 answer을 return하고 종료한다.
profile
Tomorrow will be better than yesterday :)

0개의 댓글