[BOJ][๐ŸŸก5][๋ฐฑ์ค€#03020] ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #3020


๋ฌธ์ œ

๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ ํ•œ ๋งˆ๋ฆฌ๊ฐ€ ์žฅ์• ๋ฌผ(์„์ˆœ๊ณผ ์ข…์œ ์„)๋กœ ๊ฐ€๋“์ฐฌ ๋™๊ตด์— ๋“ค์–ด๊ฐ”๋‹ค. ๋™๊ตด์˜ ๊ธธ์ด๋Š” N๋ฏธํ„ฐ์ด๊ณ , ๋†’์ด๋Š” H๋ฏธํ„ฐ์ด๋‹ค. (N์€ ์ง์ˆ˜) ์ฒซ ๋ฒˆ์งธ ์žฅ์• ๋ฌผ์€ ํ•ญ์ƒ ์„์ˆœ์ด๊ณ , ๊ทธ ๋‹ค์Œ์—๋Š” ์ข…์œ ์„๊ณผ ์„์ˆœ์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋“ฑ์žฅํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ๊ธธ์ด๊ฐ€ 14๋ฏธํ„ฐ์ด๊ณ  ๋†’์ด๊ฐ€ 5๋ฏธํ„ฐ์ธ ๋™๊ตด์ด๋‹ค. (์˜ˆ์ œ ๊ทธ๋ฆผ)

์ด ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๋Š” ์žฅ์• ๋ฌผ์„ ํ”ผํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ž์‹ ์ด ์ง€๋‚˜๊ฐˆ ๊ตฌ๊ฐ„์„ ์ •ํ•œ ๋‹ค์Œ ์ผ์ง์„ ์œผ๋กœ ์ง€๋‚˜๊ฐ€๋ฉด์„œ ๋งŒ๋‚˜๋Š” ๋ชจ๋“  ์žฅ์• ๋ฌผ์„ ํŒŒ๊ดดํ•œ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์—์„œ 4๋ฒˆ์งธ ๊ตฌ๊ฐ„์œผ๋กœ ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ ๋‚ ์•„๊ฐ„๋‹ค๋ฉด ํŒŒ๊ดดํ•ด์•ผํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ˆ˜๋Š” ์ด ์—ฌ๋Ÿ๊ฐœ์ด๋‹ค. (4๋ฒˆ์งธ ๊ตฌ๊ฐ„์€ ๊ธธ์ด๊ฐ€ 3์ธ ์„์ˆœ๊ณผ ๊ธธ์ด๊ฐ€ 4์ธ ์„์ˆœ์˜ ์ค‘๊ฐ„์ง€์ ์„ ๋งํ•œ๋‹ค)

ํ•˜์ง€๋งŒ, ์ฒซ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์ด๋‚˜ ๋‹ค์„ฏ ๋ฒˆ์งธ ๊ตฌ๊ฐ„์œผ๋กœ ๋‚ ์•„๊ฐ„๋‹ค๋ฉด ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๋Š” ์žฅ์• ๋ฌผ ์ผ๊ณฑ๊ฐœ๋งŒ ํŒŒ๊ดดํ•˜๋ฉด ๋œ๋‹ค.

๋™๊ตด์˜ ํฌ๊ธฐ์™€ ๋†’์ด, ๋ชจ๋“  ์žฅ์• ๋ฌผ์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ ํŒŒ๊ดดํ•ด์•ผํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ๊ทธ๋Ÿฌํ•œ ๊ตฌ๊ฐ„์ด ์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N์€ ํ•ญ์ƒ ์ง์ˆ˜์ด๋‹ค. (2 โ‰ค N โ‰ค 200,000, 2 โ‰ค H โ‰ค 500,000)

๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ์žฅ์• ๋ฌผ์˜ ํฌ๊ธฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์žฅ์• ๋ฌผ์˜ ํฌ๊ธฐ๋Š” H๋ณด๋‹ค ์ž‘์€ ์–‘์ˆ˜์ด๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ ํŒŒ๊ดดํ•ด์•ผ ํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ๊ทธ๋Ÿฌํ•œ ๊ตฌ๊ฐ„์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

6 7
1
5
3
3
5
1


์ถœ๋ ฅ

2 3


์˜ˆ์ œ 2

์ž…๋ ฅ

14 5
1
3
4
2
2
4
3
4
3
3
3
2
3
3


์ถœ๋ ฅ

7 2


My Sol

import sys
input = sys.stdin.readline

N, H = map(int, input().split())
ceil = [0]*(H+1)
floor = [0]*(H+1)
for _ in range(N//2):
    n = int(input())
    floor[n] += 1
    n = int(input())
    ceil[n] += 1

min_collapse = cur_collapse = N//2
cur_cnt = 1
for h in range(2, H+1):
    cur_collapse += (ceil[H+1-h] - floor[h-1])
    if cur_collapse > min_collapse: continue
    if cur_collapse < min_collapse:
        min_collapse = cur_collapse
        cur_cnt = 1
    else: cur_cnt +=1

print(min_collapse, cur_cnt)

๋ฌธ์ œ์—์„œ ์ œ์‹œํ•˜๋Š” ๋ฌธ์ œ ํ’€์ด๋Š” ์ด๋ถ„ํƒ์ƒ‰ ๋˜๋Š” ๋ถ€๋ถ„ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๋กœ ์ œ์‹œ๋˜์–ด ์žˆ๋Š”๋ฐ, ์‚ฌ์‹ค์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š” ์—†๋Š” ๋ฌธ์ œ์˜€๋‹ค.

  1. ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฒœ์žฅ(ceil)๊ณผ ๋ฐ”๋‹ฅ(floor)์„ ๊ฐ๊ฐ ๊ตฌ๋ถ„ํ•ด ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. ์ž…๋ ฅ์ด ํฌ๋ฏ€๋กœ sys.stdin.readline ์œผ๋กœ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. ์žฅ์• ๋ฌผ์€ 0๋ณด๋‹ค ํฌ๊ณ  H๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ, ์ฒซ ์ค„๊ณผ ๋ ์ค„์€ ํ•ญ์ƒ N//2์˜ ์žฅ์• ๋ฌผ์„ ๊ฐ€์ง„๋‹ค. ๋•Œ๋ฌธ์— ์ด ์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ค€๋‹ค.
  3. ์•„๋ž˜๋ถ€ํ„ฐ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋Š”๋ฐ, ํ•ด๋‹น ๊ตฌ๊ฐ„์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋ฐœ๊ฒฌ๋œ, ์ฆ‰ ๋งˆ์ฃผ์น˜๋Š” ์ข…์œ ์„์€ ceil์—์„œ ๊ณ„์‚ฐํ•ด ํ˜„์žฌ ์ถฉ๋Œ์— ๋”ํ•ด์ฃผ๊ณ , ๋ฐ˜๋Œ€๋กœ ์„์ˆœ์€ ์ด์ „ ๊ตฌ๊ฐ„๊นŒ์ง€ ํฌ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋นผ์ฃผ์–ด ์ถฉ๋Œ์—์„œ ๋ฒ—์–ด๋‚ฌ์Œ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  4. ๋งŒ์•ฝ ํ˜„์žฌ ์ถฉ๋Œ์˜ ์ˆ˜๊ฐ€ ์ตœ์†Œ ์ถฉ๋Œ๋ณด๋‹ค ํฌ๋ฉด ๋ฌด์˜๋ฏธํ•˜๋ฏ€๋กœ continue์ฒ˜๋ฆฌํ•˜๊ณ , ์ž‘์œผ๋ฉด ํ•ด๋‹น ๊ตฌ๊ฐ„์˜ ์ถฉ๋Œ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉฐ ํ•ด๋‹นํ•˜๋Š” ์ถฉ๋Œ์˜ ์ˆ˜๊ฐ€ 1๊ฐœ ๊ตฌ๊ฐ„์ด๋ผ๋Š” ์˜๋ฏธ๋กœ cur_cnt๋ฅผ 1๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐ™์œผ๋ฉด cur_cnt๋งŒ ํ•˜๋‚˜ ์˜ฌ๋ ค์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.
  5. ์ด๋ฅผ ๋งˆ์น˜๊ณ  min_collapse ์™€ cur_cnt๋ฅผ ๊ฐ๊ฐ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ