코드1
n = int(input())
weightlimit = [*map(int, input().split())]
m = int(input())
boxweight = [*map(int, input().split())]
weightlimit.sort() # 오름차순 정렬
boxweight.sort() # 오름차순 정렬
cnt = 0 # 개수를 세어줄 변수
while 1:
if len(boxweight) == 0: break # 옮길 박스가 없으면 break
for i in range(n-1,-1,-1): # 거꾸로 세어준다.
if not len(boxweight):
break
if weightlimit[-1] < boxweight[-1]: # 옮길 수 없는 경우
print(-1)
exit(0)
for j in range(len(boxweight)-1, -1, -1): # 옮길 수 있는 박스를 찾는다
if weightlimit[i] >= boxweight[j]:
boxweight.pop(j)
break # 하나 찾으면 반복문 종료
cnt += 1 # 횟수 증가
print(cnt)
보자마자 설계방법이 떠올랐지만, 중간에 노는 크레인이 생겨서 틀렸던 문제. pypy3으로 통과 가능하다.
코드2
N = int(input())
crane_w = list(map(int, input().split())) # 각 크레인의 무게 제한
crane_w.sort(reverse=True) # 내림차순 정렬
M = int(input()) # 박스 수
box_w = list(map(int, input().split())) # 박스 무게
box_w.sort(reverse=True)
result = 0
# 박스를 옮길 수 없을 경우 -1
if max(crane_w) < max(box_w):
result = -1
else:
while box_w:
for crane in crane_w:
if box_w and crane < box_w[-1]:
continue
for box in box_w:
if crane >= box:
box_w.remove(box)
break
result += 1
print(result)
다른 분의 풀이. python으로 통과 가능하다. 박스를 옮길 수 없는 경우를 밖으로 꺼내 판별할 수 있었음을 알았고, 반복문 중간에 continue를 넣어주어 시간복잡도를 줄인 것 같다. 내 코드보다 훨씬 나은 것 같아 가져와보았다.
'백준' 카테고리의 다른 글
[백준] 5972번 택배 배송 파이썬 코드 (0) | 2023.12.30 |
---|---|
[백준] 2224번 명제 증명 파이썬 코드 (0) | 2023.12.30 |
[백준] 2206번 벽 부수고 이동하기 파이썬 코드 (0) | 2023.12.27 |
[백준] 10282번 해킹 파이썬 코드 (0) | 2023.12.27 |
[백준] 1956번 운동 파이썬 코드 (0) | 2023.12.27 |
코드1
n = int(input())
weightlimit = [*map(int, input().split())]
m = int(input())
boxweight = [*map(int, input().split())]
weightlimit.sort() # 오름차순 정렬
boxweight.sort() # 오름차순 정렬
cnt = 0 # 개수를 세어줄 변수
while 1:
if len(boxweight) == 0: break # 옮길 박스가 없으면 break
for i in range(n-1,-1,-1): # 거꾸로 세어준다.
if not len(boxweight):
break
if weightlimit[-1] < boxweight[-1]: # 옮길 수 없는 경우
print(-1)
exit(0)
for j in range(len(boxweight)-1, -1, -1): # 옮길 수 있는 박스를 찾는다
if weightlimit[i] >= boxweight[j]:
boxweight.pop(j)
break # 하나 찾으면 반복문 종료
cnt += 1 # 횟수 증가
print(cnt)
보자마자 설계방법이 떠올랐지만, 중간에 노는 크레인이 생겨서 틀렸던 문제. pypy3으로 통과 가능하다.
코드2
N = int(input())
crane_w = list(map(int, input().split())) # 각 크레인의 무게 제한
crane_w.sort(reverse=True) # 내림차순 정렬
M = int(input()) # 박스 수
box_w = list(map(int, input().split())) # 박스 무게
box_w.sort(reverse=True)
result = 0
# 박스를 옮길 수 없을 경우 -1
if max(crane_w) < max(box_w):
result = -1
else:
while box_w:
for crane in crane_w:
if box_w and crane < box_w[-1]:
continue
for box in box_w:
if crane >= box:
box_w.remove(box)
break
result += 1
print(result)
다른 분의 풀이. python으로 통과 가능하다. 박스를 옮길 수 없는 경우를 밖으로 꺼내 판별할 수 있었음을 알았고, 반복문 중간에 continue를 넣어주어 시간복잡도를 줄인 것 같다. 내 코드보다 훨씬 나은 것 같아 가져와보았다.
'백준' 카테고리의 다른 글
[백준] 5972번 택배 배송 파이썬 코드 (0) | 2023.12.30 |
---|---|
[백준] 2224번 명제 증명 파이썬 코드 (0) | 2023.12.30 |
[백준] 2206번 벽 부수고 이동하기 파이썬 코드 (0) | 2023.12.27 |
[백준] 10282번 해킹 파이썬 코드 (0) | 2023.12.27 |
[백준] 1956번 운동 파이썬 코드 (0) | 2023.12.27 |