본문 바로가기
알고리즘 문제 풀이/Programmers

[7회차]

by 중앙백 2021. 12. 10.

Programmers Level.2 프린터

from collections import deque


def solution(priorities, location):
    queue = deque()
    cnt = 0
    for i in priorities:
        queue.append(i)
    while queue:
        x = queue.popleft()
        if len(queue) == 0:
            return cnt + 1
        if x < max(queue):
            queue.append(x)
            if location == 0:
                location = len(queue) - 1
            else:
                location -= 1
        else:
            cnt += 1
            if location == 0:
                return cnt
            location -= 1

 

 

Programmers Level.2 카펫

def solution(brown, yellow):
    answer = [0, 0]
    m = brown//2
    for i in range(1,m):
        if (i - 1)*(m - i - 1) == yellow:
            print(i)
            answer[0], answer[1] = m - i + 1, i + 1
            break
    return answer

 

 

Programmers Level.2 위장

def solution(clothes):
    answer = 1
    clothes_d = {}
    for i in clothes:
        if i[1] not in clothes_d:
            clothes_d[i[1]] = 1
        else:
            clothes_d[i[1]] += 1
    for clothe in clothes_d.values():
        answer *= clothe + 1
    return answer - 1

 

 

Programmers Level.2 다리를 지나는 트럭

def solution(bridge_length, weight, truck_weights):
    answer = []
    while truck_weights:
        a = truck_weights[0]
        sums = 0
        if len(answer) == 0:
            answer.append(a)
            truck_weights.remove(a)
        elif sum(answer[-1:-bridge_length:-1]) + a <= weight:
            answer.append(a)
            truck_weights.remove(a)
        else:
            answer.append(0)
    return len(answer) + bridge_length

 - 처음에 이렇게 코드를 짰더니 잘 작동하다가 테스트 케이스 하나에서 시간 초과가 떴다. 아마 sum을 구하는 과정이 비효율적이라서 그런 것 같다.

 

def solution(bridge_length, weight, truck_weights):
    cnt = 0
    bridge_truck = [0] * bridge_length
    while truck_weights:
        cnt += 1
        bridge_truck.pop(0)
        if sum(bridge_truck) + truck_weights[0] <= weight:
            bridge_truck.append(truck_weights[0])
            truck_weights.pop(0)
        else:
            bridge_truck.append(0)
    return cnt + bridge_length

 - 다리 위에 있는 다리를 리스트로 만들어서 구현했다. 앞에 방법은 다리 위에 트럭 개수에 따라 원소를 지우고 다시 넣고 그래야 했는데 그것도 비효율에 영향을 준 요인일 듯.

 

Programmers Level.2 피보나치 수

def solution(n):
    dp = [0] * 100001
    dp[1] = 1
    for i in range(2, n+1):
        dp[i] = (dp[i-1] + dp[i-2])
    dp[n] %= 1234567
    return dp[n]

 

 

'알고리즘 문제 풀이 > Programmers' 카테고리의 다른 글

[9회차]  (0) 2021.12.13
[8회차]  (0) 2021.12.12
[6회차]  (0) 2021.12.09
[5회차]  (0) 2021.12.08
[4회차]  (0) 2021.12.07

댓글