Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DFS
- 우선순위큐
- 시뮬레이션
- 자료구조
- 재귀
- DP
- 백트래킹
- MST
- 그래프 탐색
- 투포인터
- 브루트포스
- 크루스칼
- 분할정복
- 서브쿼리
- 해시
- BFS
- 누적합
- join
- 구현
- 다익스트라
- 다이나믹 프로그래밍
- 다이나믹프로그래밍
- 에라토스테네스의 체
- 다시
- 수학
- 플로이드-워셜
- 그리디
- 그래프 이론
- 트리
- GROUP BY
Archives
- Today
- Total
기록하고 까먹지 말기
1092 본문
날짜 : 2022. 11. 28
사용 언어 : python
문제
코드
import sys
n = int(sys.stdin.readline()) # 크레인의 개수
c = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline()) # 박스의 수
box = list(map(int, sys.stdin.readline().split()))
c.sort(reverse=True)
box.sort(reverse=True)
cnt = 0
if c[0] < box[0] : print(-1)
else:
cnt = 0
while box:
cnt += 1
i = 0 # i : 크레인 인덱스
while i < len(c):
if not len(box): break # 다 뺀 경우
if c[i] >= box[0]: # 뺄 수 있는 경우
#print(box[0], end=" ")
del box[0] # 뺌
else:
for j in range(len(box)):
if c[i] >= box[j]: # 뺄 수 있는 경우
#print(box[j], end=" ")
del box[j]
break
i += 1
print(cnt)
풀이
- 크레인과 박스 크기를 내림차순으로 정렬
- 각 박스와 크레인 크기를 비교하면서 크레인의 크기가 박스의 크기보다 크다면 1번째 박스(제일 큰 박스) 삭제
- 만약 작다면 다음 크레인으로 이동하면서 삭제
- 마지막 크레인으로 이동 후 옮길 수 없거나 크레인을 모두 사용한 경우 cnt 증가 후 다시 초기화한다.
- 이를 반복하여 문제를 풀이
알게된 점
- 처음 오름차순으로 정렬 후 문제를 풀었지만 오답이 나왔다.
반례)
3
6 8 9
9
1 2 3 4 5 6 7 8 9
- 오름차순으로 정렬한 경우 아웃풋은 4가 나오지만 실제 정답은 3이다.
- 그래서 내림차순으로 정렬했고 이후 뽑아내기 전 cnt에 따른 박스 값들을 출력해서 하나씩 체크했다.
참고 사이트
-