์•Œ๊ณ ๋ฆฌ์ฆ˜/ํˆฌํฌ์ธํ„ฐ

[๋ฐฑ์ค€ 1253 ๐Ÿฅ‡] ์ข‹๋‹ค

1eehyunji 2023. 8. 3. 23:39

๋ฌธ์ œ

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. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋ชจ๋“  ์ˆซ์ž๋“ค์„ ํƒ์ƒ‰ํ•˜๊ณ , ๊ณ„์‚ฐ๋œ ์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค.