[๋ฐฑ์ค] 28250 ์ด๋ธ, ํ์์ผ ๊ทธ๋ฆฌ๊ณ ํธ๋ฅธ MEX์ ์๋ด (python ํ์ด์ฌ)
https://www.acmicpc.net/problem/28250
28250๋ฒ: ์ด๋ธ, ํ์์ผ ๊ทธ๋ฆฌ๊ณ ํธ๋ฅธ MEX์ ์๋ด
์ฒซ์งธ ์ค์ ์ ์ $N$์ด ์ฃผ์ด์ง๋ค. ($2 \le N \le 200\,000$) ๋์งธ ์ค์ $N$๊ฐ์ ์ ์ $A_1, A_2, \dots, A_N$์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ($0 \le A_i \le 100\,000$)
www.acmicpc.net
๋ฌธ์ ์ด๋ฆ์ด ํน์ดํด์ ํ์ด๋ณธ ๋ฌธ์ . ์ค2๋ผ๊ณ ์์ก์๋ดค๋ค๊ฐ ๋์ฐํ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค.
์ค์ ์ฝํ ์๋ค๋ฉด ํ์์์ง ์ฅ๋ด ๋ชปํ๊ฒ ๋ค. ๊ผญ ์ ๋ ฅ๊ฐ ์ ํ์ ๋ณด๋ฉด์ ์๊ฐ์ ์ถ์ธกํ๋ ์ต๊ด์ ๋ค์ด์.
์ฌ๋ด์ด์ง๋ง ์ฝํ ํ๊ฒฝ์ ์์ํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฑด ๋์์ด ๋๋ ๊ฑฐ ๊ฐ๋ค.
์์ด๋์ด
1. ์ด์ค for๋ฌธ ์คํจ
- ์์์ ๋ณด๊ณ ๋ฌด์ํ๊ฒ ์ด์ค for์ผ๋ก ๊ตฌํํ๋ค๊ฐ ์๊ฐ์ด๊ณผํ๋ค.
2. ์ผ๋ฐํ
- mex๋ผ๋ ํจ์์ ํน์ง์ผ๋ก ์์ ๊ตฌํ ์ ์๋ค.
- ์ผ๋จ mex์ ๊ฐ์ 0, 1, 2๋ก ์ ํด์ ธ์๋ค.
- 0์ Ai, Aj๊ฐ ๋๋ค 0์ด ์๋๊ฒฝ์ฐ
- 2์ Ai, Aj์ ๊ฐ์ด ๊ฐ๊ฐ 0, 1์ธ ๊ฒฝ์ฐ
- 1์ ๋๋จธ์ง ๊ฒฝ์ฐ([0, 0] ์ผ๋, [0, 1๋ณด๋ค ํฐ์] ์ผ๋)
- ์์ ์กฐ๊ฑด์ ๊ฐ์ง๊ณ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.
์ ์ฒด ์ฝ๋
N = int(input())
arr = list(map(int, input().split()))
arr_count_0 = arr.count(0)
arr_count_1 = arr.count(1)
#Sum = arr_count_0 * arr_count_1 * 2 + (N - arr_count_1 - arr_count_0) * arr_count_0 + (arr_count_0 * (arr_count_0 - 1) // 2)
Sum = arr_count_0 * (arr_count_1 * 2 + N - arr_count_1 - arr_count_0 + ((arr_count_0 - 1) / 2))
print(int(Sum))
*Sum๊ฐ์ ์ฃผ์์ ์๋ ์์ ์ค์ธ๊ฒ
์ฝ๋ ์ค๋ช
arr_count_0 = arr.count(0)
arr_count_1 = arr.count(1)
์ผ๋จ ์ํ๋ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ๋ฐฐ์ด์์ 0์ ๊ฐ์์ 1์ ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํด์ค๋ค.
Sum = arr_count_0 * arr_count_1 * 2 + arr_count_0 * (N - arr_count_1 - arr_count_0) + (arr_count_0 * (arr_count_0 - 1) // 2)
์กฐํฉ์ด [0, 1]์ธ ๊ฒฝ์ฐ mex๊ฐ์ด 2 ์ด๋ฏ๋ก 'arr_count_0 * arr_count_1 * 2' ๋ก ์์ฑํ๋ค.
์กฐํฉ์ด [0, x(x > 1)]์ธ ๊ฒฝ์ฐ mex๊ฐ์ 1์ด๋ค. ๋ฐ๋ผ์ 'arr_count_0 * (N - arr_count_1 - arr_count_0)'๋ก ์์ฑํ๋ค.
์กฐํฉ์ด [0, 0]์ธ ๊ฒฝ์ฐ mex๊ฐ์ 1์ด๋ค. ๋ฐ๋ผ์ '(arr_count_0 * (arr_count_0 - 1) // 2)'๋ก ์์ฑํ๋ค.
mex๊ฐ์ด 0์ธ ๊ฒฝ์ฐ๋ ๋น์ฐํ ๋ฌด์ํด๋ ๋๋ค.
์ ์ถํ ๋๋ ์์์ ๊ณตํต์ธ์ arr_count_0๋ก ๋ฌถ์ด์ ์ ์ถํ๋ค.