๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 28250 ์ด๋ธŒ, ํ”„์‹œ์ผ€ ๊ทธ๋ฆฌ๊ณ  ํ‘ธ๋ฅธ MEX์˜ ์•„๋‚ด (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2023. 7. 3. 13:03

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๋กœ ๋ฌถ์–ด์„œ ์ œ์ถœํ–ˆ๋‹ค.