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 |
댓글