Skip to content

Conversation

@hyeokbini
Copy link
Collaborator

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

๊ณจ๋“œ 5
๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

1์‹œ๊ฐ„

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

๋ฌธ์ œ ๊ด€์ฐฐ


๋ฌธ์ œ์—์„œ ๋ฌผ์–ด๋ณด๋Š” ๋‚ด์šฉ ์ž์ฒด๋Š” ์ •๋ง ์‰ฝ์Šต๋‹ˆ๋‹ค. ์žฅ์• ๋ฌผ๋“ค์˜ ๋ชจ์Šต์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๊ณ , ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์ญ‰ ์ง„ํ–‰ํ–ˆ์„ ๋•Œ ๋ถ€์ˆ˜๊ฒŒ ๋˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜์™€ ๊ทธ๋Ÿฌํ•œ ๊ตฌ๊ฐ„์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ž…๋ ฅ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋™๊ตด์˜ ๊ธธ์ด๊ฐ€ N(2 ~ 200000), ๋†’์ด๊ฐ€ H(2 ~ 500000)์œผ๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ๊ณ ์‚ฌํ•˜๊ณ  boolํ˜• 2์ฐจ์› ๋ฒกํ„ฐ๋กœ๋งŒ ๋ฐ›๋Š”๋‹ค ํ•ด๋„ ์ตœ์•…์˜ ๊ฒฝ์šฐ

200000 ร— 500000 = 100000000000(byte)

= 100GB ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2์ฐจ์› ๋ฒกํ„ฐ๋กœ ์ž…๋ ฅ์€ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ผ๋‹จ์€ 1์ฐจ์› ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ž…๋ ฅ์„ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์ด์ง€๋งŒ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ฐจ์›์ด ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ ์œ  ์ฐจ์ด๋Š” ์–ด๋งˆ์–ด๋งˆํ•˜๋‹ˆ ํ•œ๋ฒˆ ์งš๊ณ  ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ธ๋ฑ์Šค(๋™๊ตด์˜ ๊ฐ€๋กœ ์œ„์น˜)์™€ ๊ธธ์ด(์žฅ์• ๋ฌผ ๊ธธ์ด)๋กœ 1์ฐจ์› ๋ฐฐ์—ด์— ์ €์žฅํ•œ ํ›„, ์ง์ˆ˜ ์ธ๋ฑ์Šค / ํ™€์ˆ˜ ์ธ๋ฑ์Šค์— ๋งž์ถ”์–ด ํ•˜๋‚˜์˜ ๋†’์ด๋งˆ๋‹ค ๊ฐ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ญ‰ ๋Œ๋ฉฐ ์„์ˆœ / ์ข…์œ ์„ ์—ฐ์‚ฐ์„ ๋”ฐ๋กœ ํ•ด์ค€ ๋‹ค์Œ ๋‹ต์„ ๊ฐฑ์‹ ํ•ด๊ฐ€๋ฉด ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ• ๋˜ํ•œ O(N * H)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ณ , ์ตœ์•…์˜ ๊ฒฝ์šฐ ์œ„์— ์ ์€ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒœ์–ต๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ N ํƒ์ƒ‰๊ณผ H ํƒ์ƒ‰ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ํƒ์ƒ‰ ์‹œ๊ฐ„์„ ์„ ํ˜• ์‹œ๊ฐ„๋ณด๋‹ค๋„ ์ค„์—ฌ์•ผ ํ•˜๋Š”๋ฐ, ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” H ํƒ์ƒ‰์€ ๊ฒฐ๊ตญ ๊ตฌํ•˜๋Š” ์ถœ๋ ฅ๊ฐ’์ด ๋ชจ๋“  H์— ๋Œ€ํ•ด ํƒ์ƒ‰ ํ›„ ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ N ํƒ์ƒ‰์— ๋Œ€ํ•ด ์ด๋ถ„ ํƒ์ƒ‰ ์•„์ด๋””์–ด๋ฅผ ์ ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ณต์žก๋„๊ฐ€ O(log N * H)์ด๋ฏ€๋กœ ์•ฝ 18 * 500000 = 900๋งŒ ๋ฒˆ ์ •๋„๋กœ, ์ถฉ๋ถ„ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ๊ตฌํ˜„


์˜ˆ์‹œ ์ž…๋ ฅ 1๋ฒˆ์„ ๊ทธ๋ฆผ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. image

์œ„์ฒ˜๋Ÿผ 1,3,5 ๋†’์ด์—์„œ 2๊ฐœ์˜ ์žฅ์• ๋ฌผ๋งŒ ๋ถ€์ˆœ ํ›„ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฑธ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“  ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์œผ๋กœ ์—ฐ์‚ฐํ•˜๋ฉด ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์ œํ•œ์„ ๋งž์ถœ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ข…์œ ์„ ๋ฒกํ„ฐ์™€ ์„์ˆœ ๋ฒกํ„ฐ ๋ฅผ ๋”ฐ๋กœ ์ž…๋ ฅ๋ฐ›์€ ๋‹ค์Œ, ๋‘ ๋ฒกํ„ฐ๋ฅผ sortํ•œ ํ›„์— ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•ด ๋ถ€์ˆ˜๊ฒŒ ๋˜๋Š” ์žฅ์• ๋ฌผ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

image

๊ฐ๊ฐ ๋ฒกํ„ฐ๋ฅผ sortํ•˜๋ฉด ์ด๋Ÿฐ ๋ชจ์Šต์ด ๋ฉ๋‹ˆ๋‹ค. curheight์—์„œ bottom๊ณผ top ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ด๋ถ„ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด์„œ ๋ฒกํ„ฐ ๊ธธ์ด - lower_bound์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋ฉด ํ•ด๋‹น ๋†’์ด์—์„œ ๋ถ€์ˆด์•ผ ํ•˜๋Š” ์žฅ์• ๋ฌผ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  H์— ๋Œ€ํ•ด์„œ ์œ„ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ณ , ์ „์—ญ ๋ณ€์ˆ˜์˜ best์™€ way๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

์ด๋ถ„ ํƒ์ƒ‰ ์ž์ฒด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•Œ์•„์„œ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•ด ์• ๋ฅผ ๋จน์€ ๋ถ€๋ถ„์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ„์„  ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์œ ๋… ๊ทธ๋ ‡๋“ฏ ํ˜„์žฌ ๋†’์ด - ์žฅ์• ๋ฌผ ๋†’์ด ๋น„๊ต๋„ ๊ทธ๋ ‡๊ณ  top ๋ฒกํ„ฐ๋Š” ์ฒœ์žฅ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ–ˆ๊ธฐ์— ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ๊ฒฝํ—˜์˜ ๋ฌธ์ œ๋‹ˆ๊นŒ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋“ค์„ ๋” ์ ‘ํ•ด๋ด์•ผ์ง€ ์‹ค๋ ฅ์ด ๋Š˜ ๊ฒƒ ๊ฐ™๋„ค์š”.

๋˜ํ•œ ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๋ˆ„์ ํ•ฉ์„ ํ†ตํ•ด์„œ๋„ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €ํ•œํ…Œ ์ง๊ด€์ ์œผ๋กœ ์™€ ๋‹ฟ๋Š” ํ’€์ด๋Š” ์ด๋ถ„ํƒ์ƒ‰์ธ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ถ”๊ฐ€๋กœ ์ฝ์–ด๋ณด์…”๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋ˆ„์ ํ•ฉ ํ’€์ด

Copy link
Collaborator

@Seol-Munhyeok Seol-Munhyeok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ด ๋ฌธ์ œ๋Š” ์–ด์ด์—†๊ฒŒ๋„ '์„์ˆœ'๊ณผ '์ข…์œ ์„'์ด ๋ญ” ์˜๋ฏธ์ธ์ง€ ๋ชฐ๋ผ์„œ ์กฐ๊ธˆ ํ—ค๋งธ์Šต๋‹ˆ๋‹ค.. '์„์ˆœ'์€ ์•„๋ž˜์—์„œ ์œ„๋กœ ์˜ฌ๋ผ์˜ค๋Š” ์žฅ์• ๋ฌผ, '์ข…์œ ์„'์€ ์œ„์—์„œ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ค๋Š” ์žฅ์• ๋ฌผ์ด๋ž€ ์˜๋ฏธ์˜€์Šต๋‹ˆ๋‹ค.

๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ๊ฐ€ h ๋†’์ด๋กœ ๋‚ ์•„๊ฐ€๋Š” ๊ฒฝ์šฐ ๋†’์ด๊ฐ€ h ์ด์ƒ์ธ ์„์ˆœ๊ณผ H-h+1 ์ด์ƒ์ธ ์ข…์œ ์„์˜ ์ˆ˜๋ฅผ ํ•ฉํ•˜๋ฉด ๋†’์ด h์—์„œ ์ถฉ๋Œํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ € ์—ญ์‹œ ์ง๊ด€์ ์œผ๋กœ ๋ฐ”๋กœ ์™€๋‹ฟ๋Š” ํ’€์ด๋Š” ์ด๋ถ„ ํƒ์ƒ‰์ด์–ด์„œ ์ฒ˜์Œ์—๋Š” ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ถ„ ํƒ์ƒ‰ ํ’€์ด

from bisect import bisect_left

# ์ž…๋ ฅ ์ฒ˜๋ฆฌ
N, H = map(int, input().split())
down, up = [], []
for i in range(N):
    h = int(input())
    if i % 2 == 0:
        down.append(h)
    else:
        up.append(h)

down.sort()
up.sort()

best = int(1e9)  # ํŒŒ๊ดดํ•ด์•ผ ํ•˜๋Š” ์žฅ์• ๋ฌผ์˜ ์ตœ์†Ÿ๊ฐ’
way = 1  # ๊ตฌ๊ฐ„์˜ ์ˆ˜
for h in range(1, H + 1):
    cnt_down = N // 2 - bisect_left(down, h)
    cnt_up = N // 2 - bisect_left(up, H - h + 1)
    cnt = cnt_down + cnt_up
    if best > cnt:
        best = cnt
        way = 1
    elif best == cnt:
        way += 1
        
print(best, way)

๊ทธ๋Ÿฐ๋ฐ Python์œผ๋กœ ์ œ์ถœ ์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!
image
PyPy๋กœ ์ œ์ถœ ์‹œ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•˜๋ฉด $O(H \ \log \ N)$์ธ๋ฐ H = 500000, N = 200000 ์„ ๋Œ€์ž…ํ•˜๋ฉด ์•ฝ 880๋งŒ ์ •๋„๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.

๋ญ”๊ฐ€ ์ด์ƒํ•ด์„œ ์ฐพ์•„๋ดค๋Š”๋ฐ 200000๊ฐœ์˜ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ธ input()์œผ๋กœ ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ด์ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋น ๋ฅธ ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์ธ sys.stdin.readline() ์„ ์‚ฌ์šฉํ•ด์„œ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„์ ํ•ฉ(์ฐจ๋ถ„ ๋ฐฐ์—ด ํŠธ๋ฆญ) ํ’€์ด

์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ๋งค๋ฒˆ ์„์ˆœ๊ณผ ์ข…์œ ์„์˜ ๊ธธ์ด๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ๋†’์ด 1๋ถ€ํ„ฐ ๋†’์ด h๊นŒ์ง€ 1์„ ๊ณ„์† ๋ˆ„์ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ ํ’€ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ $O(N^2)$๊ฐ€ ๋˜์–ด์„œ ๊ทธ๋ ‡๊ฒŒ๋Š” ํ’€ ์ˆ˜ ์—†๋Š”๋ฐ ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ฐจ๋ถ„ ๋ฐฐ์—ด ํŠธ๋ฆญ์ž…๋‹ˆ๋‹ค.

๋งค๋ฒˆ ๋†’์ด 1๋ถ€ํ„ฐ ๋†’์ด h๊นŒ์ง€ ์ถฉ๋Œ๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ๋งค๋ฒˆ ๋”ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋†’์ด h์—์„œ ์ถฉ๋Œ๋˜๋Š” ํšŸ์ˆ˜์˜ ๋ณ€ํ™”๋Ÿ‰๋งŒ์„ ๊ธฐ๋กํ•œ ํ›„ ๋ˆ„์ ํ•ฉ์„ ์ ์šฉํ•˜๋ฉด $O(N)$์œผ๋กœ ๋†’์ด h์—์„œ ์ด ์ถฉ๋Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 import sys
input = sys.stdin.readline

N, H = map(int, input().split())

# line[i] = ๋†’์ด i์—์„œ ์‹œ์ž‘๋˜๋Š” ์ถฉ๋Œ ๋ณ€ํ™”๋Ÿ‰
line = [0] * H

for t in range(N):
    h = int(input())
    if t % 2 == 0:  # ์„์ˆœ(์•„๋ž˜์—์„œ ์œ„๋กœ ์˜ฌ๋ผ์˜ด)
        line[0] += 1
        line[h] -= 1
    else:  # ์ข…์œ ์„(์œ„์—์„œ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ด)
        line[H - h] += 1

# prefix[y] = ๋†’์ด y์—์„œ ์ด ์ถฉ๋Œ ๊ฐœ์ˆ˜
prefix = [0] * (H + 1)
for i in range(H):
    prefix[i + 1] = prefix[i] + line[i]

prefix = prefix[1:]

best = min(prefix)
way = prefix.count(best)
print(best, way)

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $O(N + H)$ ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋น„์Šทํ•œ ํ’€์ด๋ฅผ ์“ฐ๋Š” ๋ฌธ์ œ๋ฅผ ์ด์ „์— ํ’€์–ด๋ณธ ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ 13์ฃผ์ฐจ ๋•Œ ํ’€์—ˆ๋˜ "๊ด‘๊ณ  ์‚ฝ์ž…" ๋ฌธ์ œ์—์„œ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ‘ผ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
#46


์ด๋ถ„ํƒ์ƒ‰๊ณผ ๋ˆ„์ ํ•ฉ(์ฐจ๋ถ„ ๋ฐฐ์—ด ํŠธ๋ฆญ)์„ ์‚ฌ์šฉํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ด€์ ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๊ณ 
์ž…์ถœ๋ ฅ์— ๊ด€ํ•œ ์ด์Šˆ๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„ ์œ„์ฃผ๋กœ๋งŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๊ณต๊ฐ„ ๋ณต์žก๋„๋„ ๊ผญ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ๋ฆฌ๋งˆ์ธ๋“œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ‘ผ๋‹ค๊ณ  ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค!!

@mj010504
Copy link
Collaborator

mj010504 commented Sep 8, 2025

์ €๋„ ์ผ๋‹จ ๋ฐ•์น˜๊ธฐ๋กœ ์ฒ˜์Œ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.(๋ฐ•์น˜๊ธฐ ํ•˜๋Š” ์Šต๊ด€์„ ์ค„์—ฌ์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.) ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ์ตœ๋Œ€ํ•œ ํ”ผํ• ๋ ค ํ–ˆ๋Š”๋ฐ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ O(n x h) ๊ฐ€ ๋‚˜์˜ค๋”๊ตฐ์š”. ๊ทธ๋ž˜์„œ ํ’€์ด๋ฅผ ์‚ด์ง ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ €๋Š” ์ด๋ถ„ํƒ์ƒ‰์ด ๋กœ์ง ์งœ๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์šด ๋А๋‚Œ์ด๋ผ์„œ ๋ˆ„์ ํ•ฉ์œผ๋กœ ํ’€์–ด๋ดค์Šต๋‹ˆ๋‹ค! ์žฅ์• ๋ฌผ์˜ ๋†’์ด๊ฐ€ ์ค‘์š”ํ•˜์ง€, ์žฅ์• ๋ฌผ์˜ ๋ฐฐ์น˜ ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ์˜€๋„ค์š”.
ํžˆ์Šคํ† ๊ทธ๋žจ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋А๋‚Œ์ด ์žˆ๋Š”๋ฐ ํžˆ์Šคํ† ๊ทธ๋žจ ๋ฌธ์ œ๋Š” ์ˆœ์„œ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์Šคํƒ์œผ๋กœ ํ’€์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋„ค์š”.
์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค!

๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ
#include <bits/stdc++.h>

using namespace std;

int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};

int main() {
   // freopen("input.txt", "rt", stdin);  
    ios::sync_with_stdio(false);  
    cin.tie(0);
    cout.tie(0);
    
    int n, h; cin >> n >> h;
   
    vector<int> a(h, 0); // ์„์ˆœ
    vector<int> b(h, 0); // ์ข…์œ ์„
    for(int i = 0; i < n; i++) {
        int size; cin >> size;

        if(i % 2 == 0) {
           a[size - 1]++;
        }
        else {
           b[size - 1]++;
        }
    }

    vector<int> wall(h, 0);

   
    for(int i = h - 2; i >= 0; i--) {
        a[i] += a[i + 1];
    }

   for(int i = h - 2; i >= 0; i--) {
        b[i] += b[i + 1];
    }

    int minn = INT_MAX;
    int cnt = 1;
    for(int i = 0; i < h; i++) {
        wall[i] = a[i] + b[h - 1 -i];
        if(minn > wall[i]) {
            cnt = 1;
            minn = wall[i];
        }
        else if(minn == wall[i]) {
            cnt++;
        }
    }
   
    cout << minn << " " << cnt;
    

    return 0;
}

Copy link
Collaborator

@flydongwoo flydongwoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์„์ˆœ๊ณผ ์ข…์œ ์„์„ ๋†’์ด๋ณ„๋กœ ์„ธ์–ด ๋ˆ„์ ํ•ฉ์„ ๋งŒ๋“  ๋’ค, ๊ฐ ๋น„ํ–‰ ๋†’์ด๋งˆ๋‹ค ๋ถ€๋”ชํžˆ๋Š” ์žฅ์• ๋ฌผ ์ˆ˜๋ฅผ O(N+H)๋กœ ๊ณ„์‚ฐํ•ด ์ตœ์†Œ ์ถฉ๋Œ๊ฐ’๊ณผ ๊ทธ ๋นˆ๋„๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด๋ดค์Šต๋‹ˆ๋‹ค.

๊ฐœ๋˜ฅ๋ฒŒ๋ ˆ
#include <iostream>
#include <vector>
#include <climits>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, H;
    cin >> N >> H;

    vector<int> downCount(H + 2, 0);
    vector<int> upCount(H + 2, 0);

    for (int i = 0; i < N; i++) {
        int x;
        cin >> x;
        if (i % 2 == 0) {
            downCount[x]++;
        } else {
            upCount[x]++;
        }
    }

    vector<int> down_acc(H + 2, 0);
    vector<int> up_acc(H + 2, 0);

    long long sum = 0;
    for (int h = H; h >= 1; h--) {
        sum += downCount[h];
        down_acc[h] = sum;
    }

    sum = 0;
    for (int u = H; u >= 1; u--) {
        sum += upCount[u];
        up_acc[H - u + 1] = sum;
    }

    long long best = LLONG_MAX;
    int bestCount = 0;

    for (int h = 1; h <= H; h++) {
        long long collide = (long long)down_acc[h] + (long long)up_acc[h];
        if (collide < best) {
            best = collide;
            bestCount = 1;
        } else {
            if (collide == best) {
                bestCount++;
            }
        }
    }

    cout << best << " " << bestCount << "\n";
    return 0;
}

๋ฌธ์ œ ํ‘ธ๋А๋ผ ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants