We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2470๋ฒˆ: ๋‘ ์šฉ์•ก

Redddy 2022. 7. 28. 09:40

๐Ÿ”ˆ ๋ฌธ์ œ

KOI ๋ถ€์„ค ๊ณผํ•™์—ฐ๊ตฌ์†Œ์—์„œ๋Š” ๋งŽ์€ ์ข…๋ฅ˜์˜ ์‚ฐ์„ฑ ์šฉ์•ก๊ณผ ์•Œ์นผ๋ฆฌ์„ฑ ์šฉ์•ก์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ ์šฉ์•ก์—๋Š” ๊ทธ ์šฉ์•ก์˜ ํŠน์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋‚˜์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ ธ์žˆ๋‹ค.  ์‚ฐ์„ฑ ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์€ 1๋ถ€ํ„ฐ 1,000,000,000๊นŒ์ง€์˜ ์–‘์˜ ์ •์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๊ณ , ์•Œ์นผ๋ฆฌ์„ฑ ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์€ -1๋ถ€ํ„ฐ -1,000,000,000๊นŒ์ง€์˜ ์Œ์˜ ์ •์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๊ฐ™์€ ์–‘์˜ ๋‘ ์šฉ์•ก์„ ํ˜ผํ•ฉํ•œ ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์€ ํ˜ผํ•ฉ์— ์‚ฌ์šฉ๋œ ๊ฐ ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์˜ ํ•ฉ์œผ๋กœ ์ •์˜ํ•œ๋‹ค. ์ด ์—ฐ๊ตฌ์†Œ์—์„œ๋Š” ๊ฐ™์€ ์–‘์˜ ๋‘ ์šฉ์•ก์„ ํ˜ผํ•ฉํ•˜์—ฌ ํŠน์„ฑ๊ฐ’์ด 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์šฉ์•ก์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ์šฉ์•ก๋“ค์˜ ํŠน์„ฑ๊ฐ’์ด [-2, 4, -99, -1, 98]์ธ ๊ฒฝ์šฐ์—๋Š” ํŠน์„ฑ๊ฐ’์ด -99์ธ ์šฉ์•ก๊ณผ ํŠน์„ฑ๊ฐ’์ด 98์ธ ์šฉ์•ก์„ ํ˜ผํ•ฉํ•˜๋ฉด ํŠน์„ฑ๊ฐ’์ด -1์ธ ์šฉ์•ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด ์šฉ์•ก์ด ํŠน์„ฑ๊ฐ’์ด 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์šฉ์•ก์ด๋‹ค. ์ฐธ๊ณ ๋กœ, ๋‘ ์ข…๋ฅ˜์˜ ์•Œ์นผ๋ฆฌ์„ฑ ์šฉ์•ก๋งŒ์œผ๋กœ๋‚˜ ํ˜น์€ ๋‘ ์ข…๋ฅ˜์˜ ์‚ฐ์„ฑ ์šฉ์•ก๋งŒ์œผ๋กœ ํŠน์„ฑ๊ฐ’์ด 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ˜ผํ•ฉ ์šฉ์•ก์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฐ์„ฑ ์šฉ์•ก๊ณผ ์•Œ์นผ๋ฆฌ์„ฑ ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ค‘ ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์šฉ์•ก์„ ํ˜ผํ•ฉํ•˜์—ฌ ํŠน์„ฑ๊ฐ’์ด 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์šฉ์•ก์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋‘ ์šฉ์•ก์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์šฉ์•ก์˜ ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. N์€ 2 ์ด์ƒ 100,000 ์ดํ•˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜๋“ค์€ ๋ชจ๋‘ -1,000,000,000 ์ด์ƒ 1,000,000,000 ์ดํ•˜์ด๋‹ค. N๊ฐœ์˜ ์šฉ์•ก๋“ค์˜ ํŠน์„ฑ๊ฐ’์€ ๋ชจ๋‘ ๋‹ค๋ฅด๊ณ , ์‚ฐ์„ฑ ์šฉ์•ก๋งŒ์œผ๋กœ๋‚˜ ์•Œ์นผ๋ฆฌ์„ฑ ์šฉ์•ก๋งŒ์œผ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํŠน์„ฑ๊ฐ’์ด 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์šฉ์•ก์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋‘ ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋‘ ์šฉ์•ก์€ ํŠน์„ฑ๊ฐ’์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ํŠน์„ฑ๊ฐ’์ด 0์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์šฉ์•ก์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์ค‘ ์•„๋ฌด๊ฒƒ์ด๋‚˜ ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ์ฒ˜์Œ์—๋Š” ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ์ž˜ ์ ‘๊ทผํ–ˆ๋‹ค๊ณ  ์†Œ๋ฌธ์ด ๋‚ ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€, ํˆฌ ํฌ์ธํ„ฐ๋กœ ์ ‘๊ทผํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์•„์ง ๋งŽ์ด ํ’€์–ด๋ณด์ง€๋Š” ๋ชปํ•ด์„œ, ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณ ๋ฏผํ•ด๊ฐ€๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

์•ž์ชฝ์—๋Š” ์‚ฐ์„ฑ์šฉ์•ก, ๋’ท์ชฝ์—๋Š” ์•Œ์นด๋ฆฌ์„ฑ์šฉ์•ก์ด ์œ„์น˜ํ•˜๋„๋ก ์ •๋ ฌ์„ ํ•ด์ค€๋‹ค.

์šฉ์•ก a์™€ ์šฉ์•ก b๋ฅผ ๋”ํ•˜์—ฌ 0๊ณผ ์ œ์ผ ๊ฐ€๊นŒ์šด a,b๋ฅผ ์ฐพ์„ ๊ฒƒ์ธ๋ฐ, a๋Š” ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ, b๋Š” ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

a+b < 0 ์ผ๋•Œ๋Š” ๋”ํ•œ ๊ฐ’์„ ์กฐ๊ธˆ๋” ์˜ฌ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด a์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ ์˜ฌ๋ฆฐ๋‹ค. 

a+b > 0 ์ผ๋•Œ๋Š” ๋”ํ•œ ๊ฐ’์„ ๋‚ด๋ ค์ฃผ๊ธฐ ์œ„ํ•ด b์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ ๋‚ฎ์ถ˜๋‹ค.

์ด๋Ÿฌ๋ฉด O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

n=int(input())
nums=sorted(list(map(int,input().split())))
f_idx, b_idx=0,n-1
ans=[] # ํ›„๋ณด๊ตฐ ๋‹ด์„ ๋ฐฐ์—ด

while f_idx<b_idx: # ์ข…๋ฃŒ์กฐ๊ฑด์€ a๊ฐ€ b๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ฒŒ
    solution=nums[f_idx]+nums[b_idx] # ๋‘ ์šฉ์•ก์„ ๋”ํ•จ
    ans.append([abs(solution),nums[f_idx],nums[b_idx]]) # ํ›„๋ณด ๋ฐฐ์—ด์— ์‚ฝ์ž…
    if solution<0: # 0๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ฐ’์„ ํ‚ค์›Œ์ฃผ๊ธฐ ์œ„ํ•ด a์˜ ์ธ๋ฑ์Šค ์˜ฌ๋ฆผ
        f_idx+=1
    elif solution>0: # 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๊ฐ’์„ ์ค„์ด๊ธฐ ์œ„ํ•ด b์ธ๋ฑ์Šค๋ฅผ ๋‚ด๋ฆผ
        b_idx-=1
    else: # 0์ด๋ผ๋ฉด ์•„๋ฌป๋”ฐ ํ”„๋ฆฐํŠธ ํ›„ ์ข…๋ฃŒ
        print(nums[f_idx], nums[b_idx])
        exit()
ans.sort() # ํ›„๋ณด ์ •๋ ฌ
print(ans[0][1],ans[0][2])

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

์œ„์— ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ์ฝ”๋“œ๋กœ ํ–ˆ๋”๋‹ˆ 308ms ๊ฐ€ ๋‚˜์™”๋‹ค. ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ํ›„๋ณด๊ตฐ์„ ๋ฐฐ์—ด์— ์‚ฝ์ž…ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ๋•Œ๊ทธ๋•Œ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ์ •๋‹ต์„ ๊ฐฑ์‹ ํ•˜์˜€๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜๋‹ˆ ์‹œ๊ฐ„์ด ์ ˆ๋ฐ˜์ •๋„ ์ค„์—ˆ๋‹ค.

 

if ans[0]>abs(solution):
        ans[0]=abs(solution)
        ans[1]=nums[f_idx]
        ans[2]=nums[b_idx]

 

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ๋‘ ์šฉ์•ก

 

2470๋ฒˆ: ๋‘ ์šฉ์•ก

์ฒซ์งธ ์ค„์—๋Š” ์ „์ฒด ์šฉ์•ก์˜ ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. N์€ 2 ์ด์ƒ 100,000 ์ดํ•˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์šฉ์•ก์˜ ํŠน์„ฑ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜๋“ค์€ ๋ชจ๋‘ -1,000,000,000 ์ด์ƒ 1,000,00

www.acmicpc.net

๊ทธ๋ฆผ/ ์ •์„œ์šฉ