programmers_고득점키트(스택,큐)

목차

  1. 프린터
  2. 쇠막대기
  3. 다리를 지나는 트럭
  4. 기능개발
  5. 주식가격

1. 프린터

def solution(priors, location):
    # 인덱스 기억
    result = []

    for i in range(len(priors)):
        priors[i] = (priors[i], i)
    while priors:
        if(len(priors) <= 1):
            result.append(priors[0])
            priors.pop(0)
        elif(0 == priors.index(max(priors, key=lambda x: x[0]))):
            result.append(priors.pop(0))
        else:
            priors.append(priors.pop(0))
    for i in range(len(result)):
        if(result[i][1] == location):
            return i+1


print(solution([1, 1, 9, 1, 1, 1], 1))

다른 사람 풀이

def solution(p, l):
    i = 0
    m = max(p)
    while True:
        v = p.pop(0)
        if m == v:
            i += 1
            if l == 0:
                break
            else:
                l -= 1
            m = max(p)
        else:
            p.append(v)
            if l == 0:
                l = len(p)-1
            else:
                l -= 1
    return i

2. 탑

def solution(height):
    result = [0] * len(height)
    for i in range(len(height)-1, 0, -1):
        for j in range(i-1, -1, -1):
            if height[i] < height[j]:
                result[i] = j+1
                break
    return result

print(solution([6, 9, 5, 7, 4]))

3. 쇠막대기

def solution(arrangement):
    answer = 0
    stack = []
    for i, x in enumerate(arrangement):
        if x == '(':
            stack.append(i)
        else:
            stack.pop()
            if arrangement[i-1] == ')':
                answer += 1
            else:
                answer += len(stack)
    return answer


print(solution("()(((()())(())()))(())"))

4. 다리를 지나는 트럭

def solution(bridge_length, weight, truck_weights):
    q = [0] * bridge_length # 다리 초기화
    sec = 0
    while q:
        sec += 1 # 시간의 경과 표시
        q.pop(0)
        if truck_weights:
            if sum(q) + truck_weights[0] <= weight:
                q.append(truck_weights.pop(0))
            else:
                q.append(0)
    return sec

5. 기능 개발

import math

def solution(progresses, speeds):
    mid = []
    result = []
    for x, y in zip(progresses, speeds):
        z = math.ceil((100-x)/y)
        mid.append(z)
    front = 0
    print(mid)
    for i in range(len(mid)):
        if mid[front] < mid[i]:
            result.append(i-front)
            front = i
    result.append(len(mid)-front)
    return result
print(solution([93, 30, 55], [1, 30, 5]))
  • if mid[front]<mid[i]:가 관건이다.

6. 주식가격

def solution(prices):
    result = []
    for idx, x in enumerate(prices):
        num = 0
        for j in range(idx+1, len(prices)):
            if x <= prices[j]:
                num += 1
            else:
                num += 1
                break
        result.append(num)
    return result


print(solution([1, 2, 3, 2, 3]))

  • 정말 어려웠는데, 다시보니 그 때 얼마나 힘들게 고민했던 기억이 떠올랐다. 그래서, 뭐가 문제였는지 기억할 수 있었다.

참고자료 [프로그래머스]https://programmers.co.kr/learn/challenges

0%