[Programmers] 기능개발

hodu·2022년 10월 24일
0

algorithm

목록 보기
19/27

https://programmers.co.kr/learn/courses/30/lessons/42586

스택/큐 탭에 있어서 그렇게 풀고자 노력했는데
한시간 반 동안 헤매다 풀었다!! 넘 뿌듯하다

import queue, math

def solution(p, s):
    q = queue.Queue()
    answer = []
    length = len(p)

    # 계산하기 - 며칠 째에 배포가 가능한지?
    t = [(math.ceil(((100-p[i])/s[i]))) for i in range(length)]
    print(t)

    # 큐를 이용하여
    # 1. 이전 리스트 값보다 크면 큐 길이를 세주고, 큐 초기화
    # 2. 이전 리스트 값보다 작으면 큐에 붙여줌
    temp = t[0]
    for i in range(1, length):
        # 앞 원소가 작은 경우 : 큐에다 붙여줌
        if temp >= t[i]:
            q.put(t[i])
        else:
        # 뒤 원소가 큰 경우
            q.put(t[i])
            answer.append(q.qsize())
            q.queue.clear()
            temp = t[i]


    if q.qsize() != 0:
        q.put(t[i])
        answer.append(q.qsize())
    else:
        answer.append(1)

    return answer

python에는 queue모듈을 사용할 수 있으므로 이 모델을 사용했다.

큐는 FIFO(First In First Out)으로 먼저 들어온 친구부터 나가게 되는 자료구조를 의미한다.

우선 큐 모델 사용방법을 간단히 알아보자면

import queue

# 선언해주기
q = queue.Queue()

# 값 추가하기
q.put(1)

# 값 제거하기
q.get()

# 큐 길이 확인하기
q.qsize()

# 큐 안에 있는 원소 전부 초기화하기
q.queue.clear()

이렇게 되어있다.

나의 로직은

  1. 남은 작업률을 t라는 배열에 계산하여 저장해준다.
  2. 이 t라는 배열에서 현재값과 이전 값을 비교하여
    2-1. 현재 값이 이전 값보다 크거나 같으면 현재 값을 큐에다 붙여줌
    2-2. 현재 값이 이전 값보다 작으면 현재 값을 큐에다 붙여주고, answer에 답을 넣어주며 큐를 초기화해줌

이렇게 구현해봤는데
마지막 값이 제대로 넣어지지 않는 것을 확인했다.

그래서 만약 큐 사이즈가 0이라면 1개의 작업이 있다는 뜻이므로 1을 넣어주고
0보다 크다면 qsize만큼 배열을 붙여준다!

이전에 프로그래머스에서 풀이 된 내용을 보니 큐로 구현을 하지 않았는데 이번에 구현을 하게 되어서 너무나 뿌듯하다!

profile
안녕 세계!

0개의 댓글