[BOJ][๐ŸŸก4][๋ฐฑ์ค€#01253] ์ข‹๋‹ค

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #1253


๋ฌธ์ œ

N๊ฐœ์˜ ์ˆ˜ ์ค‘์—์„œ ์–ด๋–ค ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ˆ˜ ๋‘ ๊ฐœ์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ ์ˆ˜๋ฅผ โ€œ์ข‹๋‹ค(GOOD)โ€๊ณ  ํ•œ๋‹ค. N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๊ทธ ์ค‘์—์„œ ์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ๋ช‡ ๊ฐœ์ธ์ง€ ์ถœ๋ ฅํ•˜๋ผ. ์ˆ˜์˜ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ’์ด ๊ฐ™์•„๋„ ๋‹ค๋ฅธ ์ˆ˜์ด๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 2,000), ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” i๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Ai๊ฐ€ N๊ฐœ ์ฃผ์–ด์ง„๋‹ค. ( Ai โ‰ค 1,000,000,000, Ai๋Š” ์ •์ˆ˜)


์ถœ๋ ฅ

์ข‹์€ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

10
1 2 3 4 5 6 7 8 9 10


์ถœ๋ ฅ

8


My Sol

import sys
input = sys.stdin.readline

def main():
    def is_good(k):
        target = nums[k]
        s, e = 0, N-1
        while True:
            if s==k: s+=1
            if e==k: e-=1
            if s >= e: break
            cur_sum = nums[s]+nums[e]
            if cur_sum == target: return True
            if cur_sum > target: e-=1
            else: s+=1
        return False

    N = int(input())
    nums = sorted(list(map(int, input().split())))
    ret = 0
    for k in range(N):
        ret += is_good(k)
    return ret

print(main())

์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ํˆฌํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

  1. ์šฐ์„  ์ž…๋ ฅ์„ ๋ฐ›์•„์ฃผ๋Š”๋ฐ, ์ˆ˜๋Š” ํˆฌํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•ด ์ •๋ ฌํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. ์ •๋ ฌ๋œ ๋ชจ๋“  ์ˆ˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ™•์ธํ•œ๋‹ค. is_good ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  3. is_good ํ•จ์ˆ˜๋Š” k๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ target์œผ๋กœ ๋‘”๋‹ค. ํˆฌํฌ์ธํ„ฐ์˜ ์–‘์ชฝ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ๊ฐ s, e๋กœ ์„ค์ •ํ•˜๊ณ  0๊ณผ N-1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์ˆ˜์˜ ๋ฒ”์œ„๋Š” ์Œ์ˆ˜, 0, ์–‘์ˆ˜์ด๋ฏ€๋กœ ๊ฐ€์žฅ ํฐ ๊ฐ’๊ณผ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด๋”๋ผ๋„ ์ ๋‹นํ•œ ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  4. ๋‘ ์ธ๋ฑ์Šค์˜ ๊ฐ’๋“ค์„ ๋”ํ•œ ๊ฐ’์„ ๋ณด๋ฉฐ ๋ฒ”์œ„๋ฅผ ์ขํ˜€๊ฐ€๋Š”๋ฐ, ์ด๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ๋ชฉํ‘œ ์ธ๋ฑ์Šค์ธ k๋ผ๋ฉด s์˜ ๊ฒฝ์šฐ 1์„ ๋”ํ•˜๊ณ , e์˜ ๊ฒฝ์šฐ 1์„ ๋นผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  5. ๋งŒ์•ฝ ๋”ํ•œ ๊ฐ’์ด ๋ชฉํ‘œ์น˜์ธ target๊ณผ ๊ฐ™๋‹ค๋ฉด ์ข‹์€ ์ˆ˜๋ผ๋Š” ์˜๋ฏธ๋กœ True๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ํฌ๋‹ค๋ฉด e๋ฅผ 1 ์ค„์ด๊ณ  ์ž‘๋‹ค๋ฉด s๋ฅผ 1 ๋Š˜๋ ค ๋‹ค์‹œ ํ™•์ธํ•œ๋‹ค.
  6. ์ด๋ฅผ s๊ฐ€ e์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ปค์ง€๋Š” ์ˆœ๊ฐ„๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, ์ด ์‚ฌ์ด์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  7. True๋ฉด 1, False๋ฉด 0์„ ret์— ๋”ํ•˜๋Š”๋ฐ, ๋ชจ๋“  ์ˆ˜์— ๋Œ€ํ•ด ์‹ค์‹œํ•œ ๋ˆ„์ ๊ฐ’ ret์„ main ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ