[๋ฐฑ์ค 1253 ๐ฅ] ์ข๋ค
๋ฌธ์
N๊ฐ์ ์ ์ค์์ ์ด๋ค ์๊ฐ ๋ค๋ฅธ ์ ๋ ๊ฐ์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ฉด ๊ทธ ์๋ฅผ “์ข๋ค(GOOD)”๊ณ ํ๋ค.
N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ์ค์์ ์ข์ ์์ ๊ฐ์๋ ๋ช ๊ฐ์ธ์ง ์ถ๋ ฅํ๋ผ.
์์ ์์น๊ฐ ๋ค๋ฅด๋ฉด ๊ฐ์ด ๊ฐ์๋ ๋ค๋ฅธ ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์์ ๊ฐ์ N(1 ≤ N ≤ 2,000), ๋ ๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ์๋ฅผ ๋ํ๋ด๋ Ai๊ฐ N๊ฐ ์ฃผ์ด์ง๋ค. (|Ai| ≤ 1,000,000,000, Ai๋ ์ ์)
์ถ๋ ฅ
์ข์ ์์ ๊ฐ์๋ฅผ ์ฒซ ๋ฒ์งธ ์ค์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
n=int(sys.stdin.readline())
numbers=list(map(int, sys.stdin.readline().strip().split(' ')))
numbers.sort()
ans=0
for idx in range(n):
start=0
end=n-2
value=numbers[idx]
tmp_numbers=numbers[:idx]+numbers[idx+1:]
while start<end:
sum_value=tmp_numbers[start]+tmp_numbers[end]
if sum_value==value:
ans+=1
break
elif sum_value<value:
start+=1
elif sum_value>value:
end-=1
print(ans)
numbers์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฐ๋ค์ ๋ํด์ ํฌ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด์ ํด๋น ์๋ฅผ ๋ ์๋ฅผ ๋ํด์ ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ค.
0. ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ๋ ฅ๋ฐ์ ์๋ค์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
1. 0๋ฒ๋ถํฐ n-1๋ฒ ์ธ๋ฑ์ค๊น์ง for๋ฌธ์ ๋๋ฉด์ ๋ชจ๋ ํ์ํ๋ค.
2. for๋ฌธ ์์์ idx๋ฒ ์ซ์ ์ ์ธํ๊ณ ์ ์ฅํ ๋ฐฐ์ด tmp_numbers๋ฅผ ํฌ ํฌ์ธํฐ๋ก ๋๋ฉด์ idx๋ฒ ์ซ์๋ฅผ ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ค.
3. start=0, end=n-2(tmp_numbers์ ๋ง์ง๋ง ์ธ๋ฑ์ค)๋ก ์ด๊ธฐ์ ํ ์ ํ๊ณ , idx๋ฒ ์ซ์๋ ๋ณ์ value์ ์ ์ฅํ๋ค.
4. ์๋ก ๋ค๋ฅธ ์๋ผ๋ฆฌ ๋ํ๋ ๊ฒฝ์ฐ๋ง ํ์ํ๊ธฐ ์ํด์ start<end์ผ ๋์๋ง while๋ฌธ์ ๋ฐ๋ณตํ๋๋ก ํ๋ค.
5. while๋ฌธ ์์์๋ ๋ณ์ sum_value์ ํ์ฌ start์ end์ ํด๋นํ๋ tmp_numbers์ ์ซ์๋ฅผ ๋ํด์ ์ ์ฅํ๊ณ , sum_value๊ฐ ์ฐ๋ฆฌ๊ฐ ์ฐพ๋ value๊ฐ๊ณผ ๋์ผํ์ง ํ์ธํ๋ค.
6. ๋์ผํ๋ค๋ฉด, ์ข์ ์์ ๊ฐ์(ans)๋ฅผ +1ํด์ฃผ๊ณ , ์ด๋ฏธ ์ข์ ์์ธ ๊ฒ์ด ๊ฒฐ์ ๋์ผ๋ฏ๋ก ๋ ์ด์ ํด๋น ์์ ๋ํ while๋ฌธ์ ๋ฐ๋ณตํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ break๋ก while๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
7. sum_value๊ฐ value๋ณด๋ค ์๋ค๋ฉด, start+=1ํด์ฃผ๊ณ ๋ ํฐ ๊ฐ์ ํ์ํ๋๋ก ํ๋ค.
8. sum_value๊ฐ value๋ณด๋ค ํฌ๋ค๋ฉด, end-=1ํด์ฃผ๊ณ ๋ ์์ ๊ฐ์ ํ์ํ๋๋ก ํ๋ค.
9. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์ ๋ชจ๋ ์ซ์๋ค์ ํ์ํ๊ณ , ๊ณ์ฐ๋ ์ข์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.