Tiny Bunny
본문 바로가기
Algorithm/Python

[BOJ #7983] 내일 할거야

by nowag 2024. 3. 14.

문제

아 과제 하기 싫다. 아무 것도 안 하고 싶다. 더 적극적이고 격렬하게 아무 것도 안 하고 싶다.

있잖아. 내가 아까 책상에다가 n개의 과제 목록을 적어놨어. 각각의 과제 i는 di 일이 걸리고, 오늘로부터 ti 일 안에 끝내야 해. 그러니까 오늘이 0일이면, ti일이 끝나기 전에 제출이야. 과제는 한번 시작하면 쉬지 않고 계속해야 해. 안 그러면 머리 아파 지거든.

근데 있잖아. 내가 지금 너무, 너무 아무 것도 안 하고 싶어. 그래서 오늘은 아무 것도 안 할 거야. 더 중요한 게 뭔지 알아? 사실 나 내일도, 모레도, 아무 것도 안 하고 싶어. 한 며칠 동안은 계속 아무 것도 안하려고. 아. 과제가 있을 때 내가 내일부터 연속으로 최대 며칠동안 놀 수 있는지 궁금하다. 궁금하긴 한데, 난 아무 것도 안 하고 싶어.

좋은 생각이 났다. 너희가 이걸 대신 구해주면, 내가 너희의 맞은 문제 수를 하나 올려줄게.

 

입력

첫째 줄에는 과제의 개수인 정수 n (1 ≤ n ≤ 106)이 주어진다.

이후 n개의 줄에 각각의 과제를 나타내는 두 정수 di, ti (1 ≤ di, ti ≤ 109)가 순서대로 주어진다. 오늘은 0일이다.

모든 입력에 대해, 오늘 아무 것도 안 해도 과제를 마무리 할 수 있는 방법이 존재함이 보장된다.

 

출력

내일(1일)부터 연속으로 최대 며칠 동안 놀 수 있는지를 출력한다. 가령, 답이 0이면, 내일 과제를 해야 하며, 1 이면, 모레에 과제를 해야 한다.

 

내가 쓴 코드 1 (시간초과)

from sys import stdin; input = stdin.readline
n = int(input())
D = []
T = []
for _ in range(n):
    d, t = map(int, input().split())
    D.append(d)
    T.append(t)

T_MAX = day = 0
while T:
    T_MAX = max(T)
    idx = T.index(T_MAX)
    if day != 0 and T_MAX >= day:
        day -= D[idx]
    else:
        day = T_MAX - D[idx]
    T.pop(idx)
    D.pop(idx)

print(day)

이 코드를 쓰고 아주 뿌듯해 했지만 ... 처참히 시간초과 남 ^^^^ 그래서 내일 할거야를 진짜 내일 할거야 하고 안해버렸다는 ㅎㅎ

 

내가 쓴 코드 2

from sys import stdin; input = stdin.readline
n = int(input())
# arr의 원소 : [d, t]
arr = [list(map(int, input().split())) for _ in range(n)]
arr.sort(key=lambda x: x[1])

day = 99999999999   # arr[n-1][1]
for i in range(n-1, -1, -1):
    day = min(day, arr[i][1]) - arr[i][0]

print(day)

lambda 함수는 한 20번 써도 익숙해지지 않을 것 같은데,, 람다의 거부감을 극복해내고 다시 공부하고 이걸 이용해서 코드를 작성해보았다. 람다로 인해 코드가 이렇게나 쉬워질 수가 있다고? 싶긴 하다. 마지막 lambda 관련 글 첨부해놨으니 람다 잊을만 하면 찾아와서 참고하기 !!

 

제출 결과

 

[참고]

https://gorokke.tistory.com/38 

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ #2178] 미로 탐색  (2) 2024.03.17
[BOJ #1092] 배  (0) 2024.03.14
[BOJ #1260] DFS 와 BFS  (1) 2024.03.12
[BOJ #17478] 재귀함수가 뭔가요?  (2) 2024.03.12
[BOJ #16953] A -> B  (1) 2024.03.11