🧩 문제 : 7983번 내일 할거야
👩🏻💻 문제 정리
여기서 신경써야할 부분!
과제 a와 과제 c를 8일에 모두 할 수 없음. 즉 하루에 한 과제만 수행 가능함
따라서 과제 a를 하루 일찍 시작해야함
💪🏻 해결 방법
1️⃣ 내가 생각한 풀이방법
1. 마감 기한을 느린 순서대로 정렬하자.
2. 정렬한 과제 목록을 차례대로 마감 기한과 소요 시간을 고려하여 자유 시간을 갱신하자.
- 마감 기한이 자유 시간보다 작거나 같다면 마감 기한을 자유 시간으로 갱신
- 마감 기한이 자유 시간보다 크다면 마감 기한을 현재 마감 기한에서 소요시간을 뺀 값으로 갱신
3. 최종 자유시간을 출력하면 끝
정답 코드
import sys
input=sys.stdin.readline
n = int(input()) # N : 과제 개수
homework = [] # 과제 목록
for i in range(n):
d,t = map(int,input().split()) # d : 과제 소요 시간, t : 과제 마감 기한
homework.append([d,t])
homework.sort(key=lambda x:x[1], reverse=True) # 마감 기한 기준으로 내림차순 정렬
free_day = homework[0][1] # 자유시간 (초기 값)
for i in range(n):
taken_time = homework[i][0]
end_time = homework[i][1]
if end_time <= free_day: # 자유시간 줄이기
free_day = end_time - taken_time
else: # 과제 수행 기간이 겹친다면
free_day = free_day - taken_time
print(free_day)
☁️ 새로 알게 된 사실
homework = [] # 과제 목록
for i in range(n):
d,t = map(int,input().split()) # d : 과제 소요 시간, t : 과제 마감 기한
homework.append([d,t])
homework = [list(map(int, input().split())) for _ in range(n)]
다른 풀이를 구경하다가 한줄로 배열에 값을 넣을 수 코드를 알게되었다 !
다음에 써봐야지 ^_____^
🎁 성공!
'알고리즘' 카테고리의 다른 글
[BOJ / Python] 2156 포도주 시식 (0) | 2023.01.20 |
---|---|
다이나믹 프로그래밍 (0) | 2023.01.20 |
정렬 알고리즘 #선택 정렬/삽입정렬/퀵 정렬/계수 정렬 (0) | 2023.01.14 |
[BOJ / Python] 2251 물통 (0) | 2023.01.14 |
[BOJ / Python] 3020 개똥벌레 (0) | 2023.01.11 |