๐ ๋ฌธ์
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]
๐ ๋ฌธ์ ๋งํฌ ๋ ์ฉ์ก
๊ทธ๋ฆผ/ ์ ์์ฉ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9019๋ฒ: DSLR - ํ์ด์ฌ (0) | 2022.08.03 |
---|---|
[๋ฐฑ์ค] 1753๋ฒ: ์ต๋จ๊ฒฝ๋ก - ํ์ด์ฌ (0) | 2022.07.30 |
[๋ฐฑ์ค] 1043๋ฒ: ๊ฑฐ์ง๋ง - ํ์ด์ฌ (0) | 2022.07.26 |
[๋ฐฑ์ค] 10026๋ฒ: ์ ๋ก์์ฝ - ํ์ด์ฌ (0) | 2022.07.14 |
[๋ฐฑ์ค] 11688๋ฒ: ์ต์๊ณต๋ฐฐ์ ์ฐพ๊ธฐ - ํ์ด์ฌ (0) | 2022.07.11 |