From 9a2110782e93e67593a84f9aad9e1d4e17f42d4c Mon Sep 17 00:00:00 2001 From: H0ngJu Date: Sat, 18 Jan 2025 09:35:43 +0900 Subject: [PATCH] 2024-01-18 --- H0ngJu/README.md | 4 +- .../\354\273\254\353\237\254\353\263\274.py" | 57 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 "H0ngJu/\353\210\204\354\240\201\355\225\251/\354\273\254\353\237\254\353\263\274.py" diff --git a/H0ngJu/README.md b/H0ngJu/README.md index 75c8f0c..5d06ee8 100644 --- a/H0ngJu/README.md +++ b/H0ngJu/README.md @@ -38,4 +38,6 @@ | 34차시 | 2024.11.19 | 누적합 | [개똥벌레](https://www.acmicpc.net/problem/3020) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/256 | | 35차시 | 2024.11.23 | DP | [전깃줄](https://www.acmicpc.net/problem/2565) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/258 | | 36차시 | 2024.12.02 | 수학 | [머리 톡톡](https://www.acmicpc.net/problem/1241) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/260 | -| 36차시 | 2024.12.31 | 그리디 | [회의실 배정](https://www.acmicpc.net/problem/1931) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/261 | +| 37차시 | 2024.12.31 | 그리디 | [회의실 배정](https://www.acmicpc.net/problem/1931) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/262 | +| 38차시 | 2024.01.06 | 정렬 | [최소 회의실 개수](https://www.acmicpc.net/problem/19598) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/263 | +| 39차시 | 2024.01.18 | 정렬 | [컬러볼](https://www.acmicpc.net/problem/10800) | https://github.com/AlgoLeadMe/AlgoLeadMe-1/pull/266 | diff --git "a/H0ngJu/\353\210\204\354\240\201\355\225\251/\354\273\254\353\237\254\353\263\274.py" "b/H0ngJu/\353\210\204\354\240\201\355\225\251/\354\273\254\353\237\254\353\263\274.py" new file mode 100644 index 0000000..bf97ff4 --- /dev/null +++ "b/H0ngJu/\353\210\204\354\240\201\355\225\251/\354\273\254\353\237\254\353\263\274.py" @@ -0,0 +1,57 @@ +import sys + +def input(): return sys.stdin.readline().rstrip() + +N = int(input()) +info = [list(map(int, input().split())) + [i] for i in range(N)] +dp = [0 for _ in range(N)] +answer = [0 for _ in range(N)] + +# 완탐 -> 시간 초과 +# a가 b보다 크면 (색이 다르다는 가정 하에), a는 b 값을 + 하면 됨 -> 누적합 -> 전체 값에서 같은 색만 빼주기 + +info.sort(key=lambda x: (x[1], x[0])) +total = 0 +color_sum = [0 for _ in range(200001)] +size_sum = [0 for _ in range(200001)] +pre_size = 0 # 다른 컬러이면서 같은 사이즈인 경우를 위해 저장 +pre_color = 0 + +for i in range(N): + color, size, index = info[i] + + if pre_color == color and pre_size == size: + dp[index] = dp[info[i-1][2]] + else : + dp[index] = total - color_sum[color] - size_sum[size] + + total += size + color_sum[color] += size # 같은 색깔의 합 + size_sum[size] += size # 같은 사이즈의 합 + + pre_size = size + pre_color = color + +for i in dp: + print(i) + +# 예외 케이스 +# 3 +# 1 4 +# 2 4 +# 1 4 + +# 6 +# 1 5 +# 2 6 +# 7 6 +# 5 6 +# 2 6 +# 1 6 + +# 5 +# 3 15 +# 3 15 +# 3 5 +# 1 15 +# 2 10 \ No newline at end of file