일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다이나믹 프로그래밍
- 그리디
- 백준 1331번
- 백준 18310번
- 알고리즘
- 백준 2512번
- 그래프
- 백준
- Python
- 백준 16918번
- 백준 1987
- 백준 3085번
- AWS
- java_programming
- 다이나믹프로그래밍
- 모각코
- 깃헙
- 자바
- 명품자바
- ubuntu
- 백준 15787번
- javascript
- 백준 1253번
- 백준 17451번
- MySQL
- HUFS 모각코 캠프
- SQL
- SWEA 15612번
- 머신러닝과 딥러닝
- react
Archives
- Today
- Total
차곡차곡
[모각코] 210717 Today I Learned 본문
백준 #1202 보석 도둑
** 틀린 알고리즘
import sys
N, K = map(int, sys.stdin.readline().split()) # 보석 개수, 가방 개수
jewelry = [] # 보석 정보 저장
bag = [] # 가방 최대 무게 저장
for i in range(N):
m, v = map(int, sys.stdin.readline().split()) # m: 보석 무게, v: 보석 가격
jewelry.append((m, v))
for i in range(K):
bag.append(int(input()))
jewelry.sort(key=lambda x: x[1]) # 보석 가격을 기준으로 오름차순 정렬
bag.sort()
max_value = 0 # 훔칠 수 있는 보석 가격 합의 최대값
for i in range(N-1, -1, -1): # 보석 가격 큰 것부터
if jewelry[i][0] <= bag[0]:
max_value += jewelry[i][1]
bag.pop(0)
if len(bag) == 0:
break
print(max_value)
보석 정보들을 보석 가격을 기준으로 오름차순 정렬하고, 가방 무게를 오름차순으로 정렬해서 가방 무게가 적은 것부터 가격이 큰 보석을 선택해나가는 알고리즘을 생각했다. 결론부터 말하면 틀린 알고리즘이다. ㅜ 처음 타임아웃이 떠서 input을 sys로만 고치면 될 거라고 생각했는데 갑자기 틀렸습니다 가 나와서 당황했다. 알고리즘을 다시 생각해보니 내가 틀린 게 맞았다. 무게가 적은 가방부터 보석을 선택해 나가면서 가방 무게보다 많이 나가서 담지 못 한 보석은 다음 가방이 보석을 선택할 때도 고려하지 않아도 된다고 생각했는데, 고려를 하는 게 맞다.
이중 for문만 쓸 수 있으면 뚝딱 만들어지는데 당연히 타임아웃이 난다 ... 무엇을 기준으로 정렬해야 할까 ㅜ for문 하나로 뚝딱 써지길래 웬일인가 했더니 역시나 한 번에 맞을 리 없음 ㅜ
'HUFS > 2021 HUFS 모각코 캠프' 카테고리의 다른 글
[모각코] 210724 Today I Learned (0) | 2021.07.25 |
---|---|
[모각코] 210721 Today I Learned (2) | 2021.07.22 |
[모각코] 210714 Today I Learned (0) | 2021.07.15 |
[모각코] 210710 Today I Learned (2) | 2021.07.10 |
[모각코] 210707 Today I Learned (0) | 2021.07.07 |
Comments