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
- 컴퓨터 네트워크
- 위치 암호화
- DES 알고리즘
- 그리디 알고리즘
- 욱제는 효도쟁이야!!
- 사과 담기 게임
- 문자 변환표
- 코딩 테스트
- 전자 메일
- 5와 6의 차이
- JoCoding
- 비연결형 통신
- 구현
- 2 + 1 세일
- 나동빈
- 세탁소 사장 동혁
- 키워드 암호화
- Greedy
- 파이썬
- 한빛미디어
- Pop
- 소가 길을 건너간 이유3
- 컬럼 암호화
- 통나무 건너기
- ZOAC 2
- 동적 계획 알고리즘
- 백준
- 대체 암호화
- 거스름돈
- 시저 암호화
Archives
- Today
- Total
주니어로서의 백 걸음, 개발자로서의 한 걸음
[백준 13904] 과제 파이썬 문제 풀이 본문
문제 풀이: 해당 문제는 어려워서 다른 사람 블로그를 참고했다.
https://whitehairhan.tistory.com/337
n = int(input())
l = []
for _ in range(n):
a, b = map(int, input().split())
l.append((a, b))
l.sort()
d = []
result = 0
for date in range(n, 0, -1):
while l and l[-1][0] >= date:
d.append(l.pop()[1])
if d:
d.sort()
result += d.pop()
print(result)
풀이를 해보면 먼저 마감일과 점수를 튜플 형태로 l에 담는다. l을 정렬하면 마감일이 적은 수부터 오름차순으로 정렬한다.
d는 해당 일수에 가능한 과제를 저장하는 리스트이다.
이 문제는 마감일이 큰 것부터 낮은 것까지 반복해 나가는 것이 핵심이다. 따라서 date는 n부터 1까지 거꾸로 진행해나가야 한다. (date를 1부터 반복하는 것은 최적의 해를 구할 수 없다.)
정렬된 l은 (1, 20), (2, 50), (3, 30), (4, 10), (4, 40), (4, 60), (6, 5) 다음과 같이 정렬되어 있다.
따라서 현재 l[-1][0]은 6이 된다. 이후에 l.pop()에 의해 l[-1][0]의 값은 변한다.
date가 4인 경우를 보면 d에는 60, 40, 10다음과 같이 정렬되어 있고 d.sort()에 의해 10, 40, 60으로 정렬된다.
d.pop()에 의해 date가 4일 때 받을 수 있는 가장 높은 점수 60이 result에 더해진다.
참고한 블로그에서 캡쳐한 사진
전체적인 과정은 다음과 같이 선택된다.
'Python > 백준 문제풀이' 카테고리의 다른 글
[백준 11508] 2 + 1 세일 파이썬 문제 풀이 (0) | 2023.07.24 |
---|---|
[백준 2828] 사과 담기 게임 파이썬 문제 풀이 (0) | 2023.07.23 |
[백준 11497] 통나무 건너기 파이썬 문제 풀이 (0) | 2023.07.22 |
[백준 2810] 컵홀더 파이썬 문제 풀이 (0) | 2023.07.22 |
[백준 1343] 폴리오미노 파이썬 문제 풀이 (0) | 2023.07.21 |