'์ข์ ์' ๊ตฌํ๊ธฐ[1253๋ฒ]
Q. N๊ฐ์ ์ ์ค์์ ์ด๋ค ์๊ฐ ๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด ๊ทธ ์๋ฅผ “์ข๋ค(GOOD)”๊ณ ํ๋ค.
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ์ค์์ ์ข์ ์์ ๊ฐ์๋ ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ผ.
์์ ์์น๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ด ๊ฐ์๋ ๋ค๋ฅธ ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์์ ๊ฐ์ N(1 ≤ N ≤ 2,000), ๋ ๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ์๋ฅผ ๋ํ๋ด๋ Ai๊ฐ N๊ฐ ์ฃผ์ด์ง๋ค. (|Ai| ≤ 1,000,000,000, Ai๋ ์ ์)
์ถ๋ ฅ
์ข์ ์์ ๊ฐ์๋ฅผ ์ฒซ ๋ฒ์งธ ์ค์ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ๋ถ์
N์ ๊ฐ์๊ฐ ์ต๋ 2,000์ด๋ผ ๊ฐ์ ํด๋ ์ข์ ์ ํ๋๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ N2๋ณด๋ค ์์์ผ ํจ
์ข์ ์ ํ๋๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ ์ต์ O(nlogn)์ด์ด์ผ ํจ
์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ํฌ ํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ ์ ์์ ํฉ์ด ํด๋น K๊ฐ๊ณผ ๊ฐ์์ง ๋น๊ตํ๋ฉด์ ์ข์ ์ ๊ฐ์ ๊ตฌํ๊ธฐ
(๋จ, ์ ๋ ฌ๋ ๋ฐ์ดํฐ์์ ์๊ธฐ ์์ ์ ์ข์ ์ ๋ง๋ค๊ธฐ์ ํฌํจํ๋ฉด ์๋จ → K์ ์ธ๋ฑ์ค ๊ฐ๊ณผ ๋ ์์ ์ธ๋ฑ์ค ๊ฐ์ด ๊ฐ์ผ๋ฉด ์๋จ
[ํฌ ํฌ์ธํฐ ์ด๋ ์์น]
• A[i]+A[j] > K: j--;
• A[i]+A[j] < K: i++;
• A[i]+A[j] == K: count++; ํ๋ก์ธ์ค ์ข ๋ฃ
์๋์ฝ๋ ์์ฑ
1. ์์ ๊ฐ์ N์
๋ ฅ๋ฐ๊ธฐ
2. ๋ฆฌ์คํธ A ์
๋ ฅ๋ฐ๊ธฐ
3. ๋ฆฌ์คํธ A ์ ๋ ฌ
4. for k in range(N): k๊ฐ N์ด ๋ ๋๊น์ง ํ์
i=0 ํฌ์ธํฐ ๊ฐ ์ด๊ธฐํ
j=N-1
K=A[k] ํ๋ณ ๋์์ธ ์ K๊ฐ ์ง์
while i<j: i์ j๊ฐ ๋ง๋๊ธฐ ์ ๊น์ง ๋ฐ๋ณต
ํฌํฌ์ธํฐ ์ด๋ ์์น ์ด์ฉ
โญ๏ธ k๊ฐ i์ ๊ฐ๊ฑฐ๋, k๊ฐ j๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ์ธํด์ฃผ์ด์ผ ํจ(์๊ธฐ ์์ ์ ์ข์ ์ ๋ง๋ค๊ธฐ์ ํฌํจํ๋ฉด ์๋จ)
5. ์ข์ ์์ ๊ฐ์ ์ถ๋ ฅ
์ฝ๋ ๊ตฌํ
import sys
input=sys.stdin.readline
N=int(input()) #์์ ๊ฐ์
A=list(map(int, input().split())) #N๊ฐ์ ์ ๊ฐ A๋ฆฌ์คํธ
A.sort() #๋ฆฌ์คํธ ์ ๋ ฌ
count=0
for k in range(N): #K๊ฐ N๊ฐ๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณต
i=0 #i์ j๋ฅผ ๋ฐฐ์ด A ์์ชฝ ๋์ ์์น
j=N-1
K=A[k]
while(i<j): #i์ j๊ฐ ๋ง๋๊ธฐ ์ ๊น์ง ๋ฐ๋ณต
#ํฌ ํฌ์ธํฐ ์ด๋ ์์น
if (A[i]+A[j])>K:
j-=1
elif (A[i]+A[j])<K:
i+=1
else:
if k==i: #์๊ธฐ ์์ ์ด ์ข์ ์๊ฐ ๋๋ ๊ฒฝ์ฐ ์ ์ธ
i+=1
elif k==j: #์๊ธฐ ์์ ์ด ์ข์ ์๊ฐ ๋๋ ๊ฒฝ์ฐ ์ ์ธ
j-=1
else:
count+=1 #count๊ฐ ์ฆ๊ฐ์ํค๊ณ
break #ํ๋ก์ธ์ค ์ข
๋ฃ
print(count)'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ(BOJ)_2164๋ฒ[์นด๋ ๊ฒ์] (0) | 2023.01.01 |
|---|---|
| ์คํ๊ณผ ํ (0) | 2022.11.27 |
| ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ(BOJ)_1546๋ฒ[ํ๊ท ๊ตฌํ๊ธฐ] (0) | 2022.11.18 |
| ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ(BOJ)_11720๋ฒ[์ซ์์ ํฉ ๊ตฌํ๊ธฐ] (0) | 2022.11.18 |
| ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ (0) | 2022.11.18 |