Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

87-tgyuuAn #268

Merged
merged 1 commit into from
Feb 3, 2025
Merged

87-tgyuuAn #268

merged 1 commit into from
Feb 3, 2025

Conversation

tgyuuAn
Copy link
Member

@tgyuuAn tgyuuAn commented Jan 31, 2025

🔗 문제 링크

택배

✔️ 소요된 시간

2시간 인데.. 생각을 좀 더 쉽게 했으면 금방 풀었을듯...

✨ 수도 코드

image

설 연휴에도 불철주야 일하시는 택배기사님들 화이팅 ..!




이 문제가 쉽게 생각하면 참 간단한 문제였는데...

어렵게 생각해서 Heap 쓰고 이러다가 시간 완전 오래걸렸네요 ...




이 문제의 핵심은 도착지점이 빠른 숫자인 곳부터 택배를 먼저 나르는 거랍니다.

그렇기 때문에 택배를 먼저 도착 지점을 기준으로 정렬을 해야해요.

저는 도착지점, 시작지점을 기준으로 정렬을 했는데 생각해보니까 시작지점을 기준으로 정렬을 할 필요는 없었을 것 같네요.

그냥 도착지점을 기준으로 정렬만 해도 될 것 같아요.

(어차피 도착지점을 기준으로 정렬되어있기 때문에 해당 도착지점까지 가는데 나를 수 있는 택배수는 정해져있기 때문이에요.)




그 다음 핵심은 N 번마을까지 있다고 했을때 N번 마을에서 가지고 갈 수 있는 택배 사이즈의 개수를 표로 관리하는거에요.

이렇게 하는 이유는 택배를 모두 들지 않더라도 내가 들 수 있는 만큼은 가져갈 수 있으므로 이를 계산하기 위함이에요.

예를 들어, 아래와 같은 예제가 있다고 하면 (문제의 예제 2)

6 60
5
1 2 30
2 5 70
5 6 60
3 4 40
1 6 40

1     2   3    4   5    6
60 60 60 60 60 60

로 초기화를 한 뒤,

택배를 도착지를 기준으로 정렬을 해요.

(1, 2, 30), (3, 4, 40), (2, 5, 70), (1, 6, 40), (5, 6, 60)



그럼 1~2로 30개를 옮길 수 있으므로

아래와 같이 표를 업데이트 하고,

1  2  3  4  5  6
30 60 60 60 60 60




(3, 4, 40), (2, 5, 70), (1, 6, 40), (5, 6, 60)

그 다음은 3~4 40개를 옮길 수 있으므로 또 표를 업데이트 해요


1  2  3  4  5  6
30 60 20 60 60 60




(2, 5, 70), (1, 6, 40), (5, 6, 60)

이제 그 다음이 핵심인데,

2~5 를 가는 택배에 70개를 옮길 수 있지만

아래 표를 보면 3번 마을에서 20개밖에 들지 못하기 때문에


1  2  3  4  5  6
30 60 20 60 60 60

2~5번 마을의 택배를 옮길 수 있는 양 중 최소값을 옮길 수 있어요.

그걸 또 빼줍니다.


1  2  3  4  5  6
30 40 0  40 60 60

이런식으로 빼지는 택배의 양을 다 더하면 끝입니둥~~~~

📚 새롭게 알게된 내용

@tgyuuAn tgyuuAn added tgyuuAn 한 줄로는 소개할 수 없는 남자. 작성 중 ⏱️ labels Jan 31, 2025
@tgyuuAn tgyuuAn self-assigned this Jan 31, 2025
@tgyuuAn tgyuuAn marked this pull request as ready for review January 31, 2025 06:51
@tgyuuAn tgyuuAn requested a review from H0ngJu January 31, 2025 06:51
Copy link
Collaborator

@H0ngJu H0ngJu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

도착지점으로 정렬해서 박스 개수를 더한다..!
는 알았는데 박스 개수를 어떻게 관리하지???? 했는데 배열 하나 만들어주면 되는 거였군요 ..ㅎ ㅏ하

PR에서 배열 힌트 얻고 풀었습니다!!

import sys

def input(): return sys.stdin.readline().rstrip()

N, C = map(int, input().split()) # 2 <= N <= 2000 / 1 <= C <= 10000
M = int(input()) # 1 <= M <= 10000
info = [list(map(int, input().split())) for _ in range(M)]
info.sort(key=lambda x : x[1])

truck = [C] * (N+1)
answer = 0

for s, r, b in info:
    min_box = min(truck[s:r])
    if min_box < b:
        for i in range(s, r):
            truck[i] -= min_box
        answer += min_box
    else:
        for i in range(s, r):
            truck[i] -= b
        answer += b

print(answer)

@tgyuuAn tgyuuAn merged commit c8cefc2 into main Feb 3, 2025
10 checks passed
@tgyuuAn tgyuuAn deleted the 87-tgyuuAn branch February 3, 2025 14:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
tgyuuAn 한 줄로는 소개할 수 없는 남자. 리뷰 완료 ✔️
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants