๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2878
2878๋ฒ: ์บ๋์บ๋
์ฒซ์งธ ์ค์ M(1 ≤ M ≤ 2×109)์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์น๊ตฌ๋ค์ด ๋ฐ๊ณ ์ถ์ดํ๋ ์ฌํ์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ๊ฐ์๋ 2×109๋ณด๋ค ์์ผ๋ฉฐ, ์น๊ตฌ๋ค์ด ๋ฐ๊ณ ์ถ์ดํ๋
www.acmicpc.net
๋์ด๋
์๊ฐ์ ํ
1์ด
๋ฌธ์
์ค๋ ์ฌํ M๊ฐ๋ฅผ ๊ฐ๋ ๋ด์ ๋ฐ์ค๊ฐ ํ๋ฐฐ๋ก ํํฌ๋ค ์ง์ ๋์ฐฉํ๋ค. ํํฌ๋ ์ด ์ฌํ์ N๋ช
์ ์น๊ตฌ๋ค์๊ฒ ๋๋์ด ์ฃผ๋ ค๊ณ ํ๋ค.
ํํฌ์ ์น๊ตฌ๋ค์ ๋ฌธ์๋ก ์ฌํ์ ๋ช ๊ฐ ๋ฐ๊ณ ์ถ์์ง ๋ณด๋๋ค. ๋ง์ฝ ๋ฐ๊ณ ์ถ์ ๊ฐ์๋งํผ ์ฌํ์ ๋ฐ์ง ๋ชปํ๋ค๋ฉด, ๊ทธ ์น๊ตฌ๋ ๋ถ๋
ธํ๊ฒ ๋๊ณ , ๋ชป ๋ฐ๋ ๊ฐ์๊ฐ ๋ง์์ง์๋ก ๋์ฑ ๋ถ๋
ธํ๊ฒ ๋๋ค.
๋๋๊ฒ๋ ํํฌ๋ ์น๊ตฌ๋ค์ ๋ถ๋
ธ๋ฅผ ์์นํํ ์ ์๋๋ฐ, ์ด๊ฒ์ ๋ชป ๋ฐ๋ ์ฌํ ๊ฐ์์ ์ ๊ณฑ์ด๋ค.
์๋ฅผ ๋ค์ด, ํํฌ์ ์น๊ตฌ ๋ฐฑ์ค์ด๊ฐ ๋ฐ๊ณ ์ถ์ ์ฌํ์ ๊ฐ์๊ฐ 32๊ฐ์์ ๋, ์ฌํ์ 29๊ฐ ๋ฐ์ 3๊ฐ๋ฅผ ๋ฐ์ง ๋ชปํ๋ค๋ฉด, ๊ทธ์ ๋ถ๋
ธ๋ 3์ ์ ๊ณฑ 9๊ฐ ๋๋ค.
ํํฌ๊ฐ ๋ฐ์ ์ฌํ์ ๊ฐ์์ ์น๊ตฌ์ ์, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์น๊ตฌ๋ค์ด ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ๊ฐ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ฌํ์ ์ ์ ํ ๋๋์ด ์ฃผ์ด ์น๊ตฌ๋ค์ ๋ถ๋
ธ์ ํฉ์ ์ต์ํํด ๊ทธ ๊ฐ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ M(1 ≤ M ≤ 2 ×10^9)์ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์น๊ตฌ๋ค์ด ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด ๊ฐ์๋ 2 ×10^9๋ณด๋ค ์์ผ๋ฉฐ, ์น๊ตฌ๋ค์ด ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ๊ฐ์์ ํฉ์ ํญ์ M์ ๋๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํํฌ ์น๊ตฌ๋ค์ ๋ถ๋ ธ์ ํฉ์ ์ต์๊ฐ์ 2^64๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์ 1
์ ๋ ฅ
5 3
1
3
2
์ถ๋ ฅ
1
์ ์ถ๋ ฅ ์์ 2
์ ๋ ฅ
10 4
4
5
2
3
์ถ๋ ฅ
4
๋ฌธ์ ํ์ด ๊ณผ์
์์๋ฅผ ํตํด ๋ฌธ์ ์ดํดํ๊ธฐ
์ ์ถ๋ ฅ ์์ 2๋ฅผ ์ดํด๋ณด์.
์ด 10๊ฐ์ ์ฌํ์ด ์กด์ฌํ๊ณ ์ด๊ฒ์ 4๋ช ์ ์น๊ตฌ์๊ฒ ๋๋์ด์ค์ผ ํ๋ค.
์ฌ๊ธฐ์ ์น๊ตฌ์๊ฒ ๋ช ๊ฐ์ฉ ๋๋ ์ฃผ๋ฉด ๋ถ๋ ธ๊ฐ ์ต์๊ฐ ๋ ์ง๋ฅผ ์๊ฐํ๊ธฐ๋ ๋งค์ฐ ์ด๋ ต๋ค.
๊ทธ ๋์ ๋ชป ๋ฐ์ ์ฌํ์ ๋ถ๋ฐฐํ๋ค๊ณ ์๊ฐํด ๋ณด์.
์ด 10๊ฐ์ ์ฌํ์ด ์กด์ฌํ๊ณ 4๋ช ์ ์น๊ตฌ๊ฐ ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
4 5 2 3
์ฆ, ์น๊ตฌ๋ค์ ๋ถ๋ ธ๋ฅผ ์ฌ์ง ์์ผ๋ ค๋ฉด ์ด 14๊ฐ์ ์ฌํ์ด ํ์ํ๋ค.
ํ์ง๋ง ์์์ ๋งํ๋ฏ ๋๋ ์ค ์ ์๋ ์ฌํ์ 10๊ฐ๋ฟ์ด๋ค..๐ฅฒ
๋ฐ๋ผ์ ๊ฒฐ๊ตญ ์น๊ตฌ๋ค์ ์ด 4๊ฐ์ ์ฌํ์ ๋ฐ์ง ๋ชปํ๊ฒ ๋๊ณ ๊ทธ๊ฒ์ ๋ถ๋ ธ๊ฐ ๋๋ค.
โ4๋ช ์ ์น๊ตฌ๋ค์๊ฒ ๋ฐ์ง ๋ชปํ 4๊ฐ์ ์ฌํ์ ์ด๋ป๊ฒ ๋ถ๋ฐฐํด์ผ ๋ถ๋ ธ์ ํฉ์ด ์ต์๊ฐ ๋ ๊น?
4๋ช ์๊ฒ 1๊ฐ์ฉ ๋ถ๋ฐฐํ๋ฉด ๋ถ๋ ธ์ ํฉ์ด ์ด 4๋ก ์ต์๊ฐ ๋๋ค.
๋ฐ์ง ๋ชปํ ์ฌํ์ ์ต๋ํ ๊ท ๋ฑํ๊ฒ ์น๊ตฌ๋ค์๊ฒ ๋ฐฐ๋ถํ๋ฉด, ๊ทธ๊ฒ์ด ๋ถ๋ ธ์ ํฉ์ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ด๋ค!
์ ๋ ฅ๊ฐ ์ ์ฅํ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int[] friends = new int[N];
for (int i = 0; i < N; i++) {
friends[i] = Integer.parseInt(br.readLine());
}
์น๊ตฌ๋ค์ ์๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ friends๋ฐฐ์ด์ ๊ฐ ์น๊ตฌ๊ฐ ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ค.
๋ฐ์ง ๋ชปํ ์ฌํ์ ๊ท ๋ฑํ๊ฒ ๋๋ ์ฃผ๋ ์ฝ๋ ๊ตฌํํ๊ธฐ
์๋ก์ด ์์๋ฅผ ๋ค์ด ์ดํด๋ณด์.
1 5 4 3
์น๊ตฌ๋ค์ด ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ์ดํฉ์ 13์ด๊ณ ์น๊ตฌ๋ 4๋ช ์ด๋ค.
์ด 11๊ฐ์ ์ฌํ์ ์น๊ตฌ๋ค์ ๋ฐ์ง ๋ชปํ๊ฒ ๋๋ค๊ณ ๊ฐ์ ํ์.
์์์ ๋งํ๋ฏ ์ด๋ฅผ 4๋ช ์ ์น๊ตฌ์๊ฒ ๊ท ๋ฑํ๊ฒ ๋๋๋ฉด 11 / 4 = 2.75์ด๋ฏ๋ก ์ฐ์ ๊ฐ๊ฐ 2๊ฐ์ฉ ๋ถ๋ฐฐํด ๋ณด์.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
โ1๊ฐ์ ์ฌํ์ ๋ฐ๊ณ ์ถ์ด ํ๋ ์น๊ตฌ์๊ฒ 2๊ฐ์ ์ฌํ์ ๋ฐ์ง ๋ชปํ๊ฒ ๋ถ๋ฐฐํ ์ ์์๊น?
๋ถ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ ๋ฐฐ์ด์ ์ ๋ ฌ์ด ํ์ํ๋ค.
1 3 4 5
1๋จ๊ณ
์ฒซ ๋ฒ์งธ ์น๊ตฌ์๊ฒ๋ ๋ถ๋ฐฐํ ๋ฐ์ง ๋ชปํ ์ฌํ์ ์(2), ๋ฐ๊ณ ์ถ์ดํ๋ ์ฌํ์ ์(1)์ค ๋ ์์ ๊ฐ์ด 1์ด๋ฏ๋ก 1๊ฐ๋ฅผ ๋ฐ์ง ๋ชปํ๋๋ก ํ๋ค.
๊ทธ ์ด์ ๋ ๋ณธ์ธ์ด ์ํ๋ ์ฌํ์ ์๋ณด๋ค ๋ ๋ง์ด ๋ฐ์ง ๋ชปํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
2๋จ๊ณ
๋๋จธ์ง ์ฌํ์ 11๊ฐ์์ 1๊ฐ๋ฅผ ๋บ 10๊ฐ๊ฐ ๋๋ค.
์ด์ ์ด 3๋ช ์๊ฒ 10๊ฐ์ ์ฌํ์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํด์ผ ํ๋ค.
3 4 5
๊ท ๋ฑํ๊ฒ ๋๋๋ฉด 10 / 3 = 3.3.. ์ด๋ฏ๋ก ๊ฐ๊ฐ 3๊ฐ์ฉ ๋ถ๋ฐฐํ๋ค.
๋ ๋ฒ์งธ ์น๊ตฌ๋ ๋ถ๋ฐฐํ ์ฌํ์ ์์ ๋ฐ๊ณ ์ถ์ด ํ๋ ์ฌํ์ ์๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ 3๊ฐ๋ฅผ ๋ถ๋ฐฐํ๋ค.
3๋จ๊ณ
๋๋จธ์ง ์ฌํ์ 10๊ฐ์์ 3๊ฐ๋ฅผ ๋บ 7๊ฐ์ด๋ค.
์ด์ ์ด 2๋ช ์๊ฒ 7๊ฐ์ ์ฌํ์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํด์ผ ํ๋ค.
4 5
๊ท ๋ฑํ๊ฒ ๋๋๋ฉด 7 / 2 = 3.5์ด๋ฏ๋ก ๊ฐ๊ฐ 3๊ฐ์ฉ ๋ถ๋ฐฐํ๋ค.
์ธ ๋ฒ์งธ ์น๊ตฌ๋ ๋ถ๋ฐฐํ ์ฌํ์ ์๋ณด๋ค ๋ฐ๊ณ ์ถ์ดํ๋ ์ฌํ์ ์๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ 3๊ฐ๋ฅผ ๋ถ๋ฐฐํ๋ค.
4๋จ๊ณ
๋๋จธ์ง ์ฌํ์ 7๊ฐ์์ 3๊ฐ๋ฅผ ๋บ 4๊ฐ์ด๋ค.
์ด 1๋ช ์๊ฒ 4๊ฐ์ ์ฌํ์ ๋ถ๋ฐฐํ๋ฉด ๋๋ฏ๋ก ๋ง์ง๋ง ์น๊ตฌ์๊ฒ 4๊ฐ๋ฅผ ๋ถ๋ฐฐํ๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Arrays.sort(friends);
long count = sum - M;
long anger = 0;
// ์ต๋ํ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ
for (long friend : friends) {
long candy = Math.min(friend, count / N--);
anger += candy * candy;
count -= candy;
}
System.out.println(anger % (long) Math.pow(2, 64));
Math.pow๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด doubleํ์ return ํ๋ฏ๋ก ์์ (long)์ผ๋ก ํ์ ์ ์ง์ ํ์ฌ ์ต์ข ๋ถ๋ ธ์ ํฉ์ ์ถ๋ ฅํ๋ค.
์ฃผ์ํด์ผ ํ ์ !!
๋ถ๋ช ๋ง๊ฒ ํ ๊ฒ ๊ฐ์๋ฐ ํ๋ ธ๋ค๊ณ ๋์จ๋ค๋ฉด ์๋ฃํ์ ์์ฌํด ๋ณด์.
M์ ๋ฒ์๋ 1 ์ด์ 2 * 10^9 ์ดํ์ธ ๊ฐ์ด๋ค.
int ์๋ฃํ์ ๋ฒ์๋ -2^31 ~ 2^31-1, ์ฆ 2^10์ 10^3์ผ๋ก ์นํํ๋ฉด ๋๋ต ~ 2 ^ 10^9์ ๋ฒ์๊ฐ ๋๋ค.
๋ฐ๋ผ์ N๋ง intํ์ด ๊ฐ๋ฅํ๊ณ ๋๋จธ์ง์ ๊ฐ๋ค์ longํ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ต์ข ์ฝ๋
public class BOJ_2878 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
long[] friends = new long[N];
long sum = 0;
for (int i = 0; i < N; i++) {
friends[i] = Integer.parseInt(br.readLine());
sum += friends[i];
}
Arrays.sort(friends);
long count = sum - M;
long anger = 0;
// ์ต๋ํ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ
for (long friend : friends) {
long candy = Math.min(friend, count / N--);
anger += candy * candy;
count -= candy;
}
System.out.println(anger % (long) Math.pow(2, 64));
}
}
'๐ฏPS - Baekjoon, etc > ๊ทธ๋ฆฌ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค] 1์ด ๋ ๋๊น์ง (Java) (0) | 2023.03.03 |
---|---|
[์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค] ์ซ์ ์นด๋ ๊ฒ์ (Java) (0) | 2023.02.26 |
[์ด๊ฒ์ด ์ฝ๋ฉ ํ ์คํธ๋ค] ํฐ ์์ ๋ฒ์น (Java) (2) | 2023.02.03 |
๋๊ธ