๐๐ป ์ข๋ค
๋ฐฑ์ค Gold4
๋ฌธ์
N๊ฐ์ ์ ์ค์์ ์ด๋ค ์๊ฐ ๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด ๊ทธ ์๋ฅผ โ์ข๋ค(GOOD)โ๊ณ ํ๋ค.
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ์ค์์ ์ข์ ์์ ๊ฐ์๋ ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ผ.
์์ ์์น๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ด ๊ฐ์๋ ๋ค๋ฅธ ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์์ ๊ฐ์ N(1 โค N โค 2,000), ๋ ๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ์๋ฅผ ๋ํ๋ด๋ Ai๊ฐ N๊ฐ ์ฃผ์ด์ง๋ค. (|Ai| โค 1,000,000,000, Ai๋ ์ ์)
์ถ๋ ฅ
์ข์ ์์ ๊ฐ์๋ฅผ ์ฒซ ๋ฒ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
10
1 2 3 4 5 6 7 8 9 10
์์ ์ถ๋ ฅ 1
8
ํํธ
3,4,5,6,7,8,9,10์ ์ข๋ค.
๐ Two Pointer
ํฌํฌ์ธํฐ๋ [ํน์ ํ ํฉ์ ๊ฐ์ง๋ ๋ถ๋ถ ์ฐ์ ์์ด]์ ๊ตฌํ ๋ ์ด๋ค.
๊ธ๋ก ํํํ๊ธฐ์๋ ์ดํด๊ฐ ์ ๊ฐ ์ ์์ผ๋ ์์๋ฅผ ํตํ์ฌ ์ค๋ช ์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค.
๋ฐฐ์ด์ด 1,2,3,2,5๋ก ์ฃผ์ด์ง๊ณ ๋ฐฐ์ด์ ์ฐ์ํฉ์ด โ5โ๊ฐ ๋๋ ๋ถ๋ถ ์์ด์ด ๋ช ๊ฐ์ธ์ง ์ฐพ๋๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์์ ํฌ์ธํฐ์ ๋ ํฌ์ธํฐ๋ฅผ ์ด๊ธฐํ ํด์ฃผ๊ณ ๋ ํฌ์ธํฐ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ฉฐ ๋์ ํฉ์ ๊ตฌํ๋ค.
๊ทธ๋ฌ๋ค๊ฐ ๋์ ํฉ์ด ์ฐพ๊ณ ์ ํ๋ ์๋ณด๋ค ์ปค์ง๋ ์๊ฐ์ด ์จ๋ค๋ฉด ์์ ํฌ์ธํฐ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค.
์๋ํ๋ฉด ํฌ์ธํฐ๋ฅผ ์กฐ์ ํ์ฌ ๋์ ํฉ์ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋์ ํฉ โฌ๏ธ ๐๐ป ์์ ํฌ์ธํฐ ์ค๋ฅธ์ชฝ
- ๋์ ํฉ โฌ๏ธ ๐๐ป ๋ ํฌ์ธํฐ ์ค๋ฅธ์ชฝ
๋ง์ฝ, ๋์ ํฉ์ด ์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์ ํ๋ ์์ ๊ฐ๋ค๋ฉด ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
์ด๋ฅผ ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ์ฐ๋ฆฌ๋ ์ต์ข ์ ์ผ๋ก ๋ถ๋ถ ์์ด์ ๊ฐ์๋ฅผ ์ฐพ์ ์ ์๋ค.
์ ํฌํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋๊ฐ?
์ด ๋ฌธ์ ์์๋ [์ด๋ค ์]๊ฐ [๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ]์ผ๋ก ๋ํ๋ผ ์ ์๋์ง๋ฅผ ๋ฌป๊ณ ์๋ค.
[์ด๋ค ์] ๐๐ป ํน์ ํ ํฉ [๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ] ๐๐ป ๋ถ๋ถ ์ฐ์ ์์ด
์์ ๊ฐ์ด ํด๋นํ๊ธฐ ๋๋ฌธ์ ํฌํฌ์ธํฐ๋ฅผ ๋ ์ฌ๋ฆด ์ ์์ด์ผ ํ๋ค.
๋ฌผ๋ก ๋๋ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๋ฅผ ๋ณด๊ณ ๊นจ๋ฌ์๋ค. ํํํ ๐
๐ ์ค๊ณ
TRY 1
์ฒซ ๋ฒ์งธ ์ค๊ณ์ ์คํจ ์ด์ ๋ ํฌ์ธํฐ ์์น๋ฅผ ๋์ผํ ๊ฒฝ์ฐ๋ ํฌํจ์์ผฐ๊ธฐ ๋๋ฌธ์ด๋ค.
ํฌํฌ์ธํฐ์ ๋ํ์ฌ ํ์๋ ๋ฌธ์ ๋ค์ด ์กฐ๊ธ ์์์ง๋ง ๊ทธ ๋์ ํ๊ณต๋ถ๋ฅผ ํ ๊ฒ์ธ์ง ๊ธฐ์ต์ด ์ ๋๋ก ์ ๋ฌ๋ค.
๊ทธ๋์ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ๋ฅผ ํ ๋ด์ฉ์ด ์์ ๋ด์ฉ์ธ๋ฐ ์์์ ๋ํ ๊ธฐ์ต์ด ๊ทธ๋๋ก ๋จ์์์ด์์ธ์ง ๋ฌด์์์ ์ผ๋ก ๋ฌธ์ ์กฐ๊ฑด์ ๊ฐ๊ณผํ ์ฑ ํฌ์ธํฐ๋ฅผ ๊ฒน์ณ๋์๋ค.
์ด ๋ฌธ์ ์์ ๋ฌป๋ ๊ฒ์ 2๊ฐ์ ์๋ฅผ ํฉํ๋ ๊ฒ์ธ๋ฐ ํฌ์ธํฐ๊ฐ ๊ฒน์ณ์ง๊ฒ ๋๋ฉด 1๊ฐ์ ์๋ฅผ ์๋ฏธํ๊ฒ ๋๋ฏ๋ก ๋ฐ๋ก๊ฐ ์๊ธด๋ค.
TRY 2
[์์ ํฌ์ธํฐ < ๋ ํฌ์ธํฐ] ์กฐ๊ฑด์ ๋ง์กฑ์ํค๊ธฐ ์ํ์ฌ ๋ ํฌ์ธํฐ๋ฅผ ๋ฐฐ์ด ๋๋ถํฐ ์ค์ ํด๋๊ณ ์ด๋์์ผฐ๋ค.
๐จ๐ปโ๐ป CODE
TRY 1
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int,input().split()))
arr.sort()
good_count = 0
for i in range(N):
check = arr[:i] + arr[i+1:]
summary = 0
m = arr[i]
end = 0
for start in range(N-1):
if check[start] > m:
break
while summary < m and end < N-1:
if start == end:
summary = check[start]
else:
summary = check[start]+check[end]
end +=1
if summary == m:
good_count += 1
break
print(good_count)
TRY 2
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int,input().split()))
arr.sort()
good_count = 0
for i in range(N):
check = arr[:i] + arr[i+1:]
start,end = 0,N-2
sum = 0
target = arr[i]
while start < end:
sum = check[start]+check[end]
if sum == target:
good_count += 1
break
if sum > target:
end -= 1
if sum < target:
start += 1
print(good_count)