[BOJ][๐ก4][๋ฐฑ์ค#01253] ์ข๋ค
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
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())
์ด๋ ต๊ฒ ์๊ฐํ๋๋ฐ, ํฌํฌ์ธํฐ๋ฅผ ์ด์ฉํด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค.
- ์ฐ์ ์ ๋ ฅ์ ๋ฐ์์ฃผ๋๋ฐ, ์๋ ํฌํฌ์ธํฐ๋ฅผ ์ํด ์ ๋ ฌํด์ ์ฒ๋ฆฌํ๋ค.
- ์ ๋ ฌ๋ ๋ชจ๋ ์๋ฅผ ๋์์ผ๋ก ํ์ธํ๋ค.
is_good
ํจ์๋ฅผ ์ด์ฉํด ํด๋นํ๋ ์ธ๋ฑ์ค์ ์๋ฅผ ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ค. is_good
ํจ์๋ k๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์target
์ผ๋ก ๋๋ค. ํฌํฌ์ธํฐ์ ์์ชฝ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ฐ s, e๋ก ์ค์ ํ๊ณ 0๊ณผ N-1๋ก ์ด๊ธฐํํ๋ค. ์์ ๋ฒ์๋ ์์, 0, ์์์ด๋ฏ๋ก ๊ฐ์ฅ ํฐ ๊ฐ๊ณผ ๊ฐ์ฅ ์์ ๊ฐ์ด๋๋ผ๋ ์ ๋นํ ์๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.- ๋ ์ธ๋ฑ์ค์ ๊ฐ๋ค์ ๋ํ ๊ฐ์ ๋ณด๋ฉฐ ๋ฒ์๋ฅผ ์ขํ๊ฐ๋๋ฐ, ์ด๋ ์ธ๋ฑ์ค๊ฐ ๋ชฉํ ์ธ๋ฑ์ค์ธ k๋ผ๋ฉด s์ ๊ฒฝ์ฐ 1์ ๋ํ๊ณ , e์ ๊ฒฝ์ฐ 1์ ๋นผ ์ฒ๋ฆฌํ๋ค.
- ๋ง์ฝ ๋ํ ๊ฐ์ด ๋ชฉํ์น์ธ
target
๊ณผ ๊ฐ๋ค๋ฉด ์ข์ ์๋ผ๋ ์๋ฏธ๋ก True๋ฅผ ๋ฐํํ๊ณ , ํฌ๋ค๋ฉด e๋ฅผ 1 ์ค์ด๊ณ ์๋ค๋ฉด s๋ฅผ 1 ๋๋ ค ๋ค์ ํ์ธํ๋ค. - ์ด๋ฅผ s๊ฐ e์ ๊ฐ๊ฑฐ๋ ์ปค์ง๋ ์๊ฐ๊น์ง ๋ฐ๋ณตํ๋๋ฐ, ์ด ์ฌ์ด์ ํด๋นํ๋ ์๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉด False๋ฅผ ๋ฐํํ๋ค.
- True๋ฉด 1, False๋ฉด 0์ ret์ ๋ํ๋๋ฐ, ๋ชจ๋ ์์ ๋ํด ์ค์ํ ๋์ ๊ฐ ret์
main
ํจ์์์ ๋ฐํํ์ฌ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ