본문 바로가기
컴퓨터/백준 문제풀이

1092 배, 2212 센서, 1461 도서관

by 하링아 2020. 10. 12.
반응형

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) # 왕복 값을 더했으니 한번은 뺀다
반응형

댓글