반응형
1092 배, 2212 센서, 1461 도서관
1092 배
# 첫번째 풀이(시간 초과, 노는 크레인 생김)
n = int(input()) # 크레인 개수
crane = list(map(int, input().split()))
crane = sorted(crane, reverse=True)
m = int(input()) # 박스 개수
box = list(map(int, input().split()))
box = sorted(box)
len_of_box = len(box)
count = 0
if crane[0] < box[-1]:
count = -1
else:
while len_of_box:
for i in crane:
if i > box[len_of_box - 1]:
len_of_box -= 1
count += 1
print(count)
# 두번째 풀이
import sys
n = int(input())
cranes = list(map(int, input().split()))
m = int(input())
boxes = list(map(int, input().split()))
if max(cranes) < max(boxes):
print(-1)
sys.exit()
positions = [0] * n # number of box that have to be carried by cranes
checked = [False] * m # carried boxes? or not
cranes.sort(reverse=True)
boxes.sort(reverse=True)
result = 0 # all time
count = 0 # check the number of box in while
while True:
if count == len(boxes):
break
for i in range(n):
while positions[i] < len(boxes):
if not checked[positions[i]] and crane[i] >= boxes[positions[i]]:
checked[positions[i]] = True
positions[i] += 1
count += 1
break
positions[i] += 1
result += 1
print(result)
- array = [0] * 10 이 0 0 0 0 0 ... 0 0 0 인줄 알았는데 0 1 2 3 ... 7 8 9 였음.
2212 센서
import sys
n = int(input())
k = int(input())
if k >= n:
print(0)
sys.exit()
array = list(map(int, input().split(' ')))
array.sort() # 오름차순 정렬
distance = [] # 각 센서 사이의 거리 구할 리스트 생성
for i in range(1, n):
distance.append(array[i] - array[i-1])
distance.sort(reverse=True) # 거리 내림차순으로 정렬
for i in range(k-1):
distance[i] = 0 # 나눌 개수만큼 분할
print(sum(distance))
1461 도서관
# place_now = 0, book_now = 0
# given list = essential place of book list
# minimun step for work that take back to right place
# not go back to 0 after work
# Maximum number of book saejoon can carry at once = M
import heapq
n, m = map(int, input().split())
array = list(map(int, input().split()))
positive = []
negative = []
largest = max(max(array), -min(array)) # 제일 큰 값 구하기(절대값)
for i in array: # 양수와 음수 나눠서 구하기
if i > 0:
heapq.heappush(positive, -i)
elif i < 0:
heapq.heappush(negative, i)
result = 0
while positive:
result += heapq.heappop(positive)
for _ in range(m - 1):
if positive:
heapq.heappop(positive)
while negative:
result += heapq.heappop(negative)
for _ in range(m - 1):
if negative:
heapq.heappop(negative)
print(-result * 2 - largest) # 왕복 값을 더했으니 한번은 뺀다
반응형
'컴퓨터 > 백준 문제풀이' 카테고리의 다른 글
1759 암호만들기, 5719 거의 최단 경로, 1774 우주신과의 교감 (0) | 2020.10.16 |
---|---|
1781 컵라면, 9663 N-Queen, 1987 알파벳 (0) | 2020.10.14 |
5585 거스름돈, 1439 뒤집기, 2012 등수 매기기 (0) | 2020.10.12 |
1012 유기농 배추, 1325 효율적인 해킹, 10282 해킹 (0) | 2020.10.08 |
1260 DFS와 BFS, 1697 숨바꼭질, 2606 바이러스 (0) | 2020.10.07 |
댓글