<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/1253
1253๋ฒ: ์ข๋ค
์ฒซ์งธ ์ค์๋ ์์ ๊ฐ์ N(1 ≤ N ≤ 2,000), ๋ ๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ์๋ฅผ ๋ํ๋ด๋ Ai๊ฐ N๊ฐ ์ฃผ์ด์ง๋ค. (|Ai| ≤ 1,000,000,000, Ai๋ ์ ์)
www.acmicpc.net
<ํ์ด ์ ๋ต>
1. ์ด๋ถํ์ / ํฌํฌ์ธํฐ๋ก ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
2. ์ด๋ถํ์์ผ๋ก ํ๋ฉด 0์ด๋ ์์ ๋ฑ์ ํฌํจํ ์์ธ ์ผ์ด์ค์ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํด์ ํฌํฌ์ธํฐ๋ก ํธ๋ ๊ฒ ๋ ๊ฐ๋จํ ๋ฌธ์
<์ ๋ต ์ฝ๋>
# 220907 1253 ์ข๋ค
# ์ ๋ต์ฝ๋
import sys
input = sys.stdin.readline
# N: ์ซ์์ ๊ฐฏ์, numers: ์ซ์๋ค์ ๋ด์ ๋ฆฌ์คํธ
N = int(input())
numbers = list(map(int, input().split()))
# ์์ด์ ์ ๋ ฌํด์ค๋ค.
numbers.sort()
# good: ์ข์ ์ซ์์ ๊ฐฏ์
good = 0
# ํฌํฌ์ธํฐ๋ก ๋ฒ์ ์ขํ๊ฐ๋ฉด์ ํ์
for i in range(N):
# target: ๊ฒ์ฆํ ์ซ์๋ฅผ ๋ฆฌ์คํธ์์ ๋นผ๋ธ๋ค.
target = numbers.pop(i)
# start: ์์ ํฌ์ธํฐ, end: ๋ ํฌ์ธํฐ
start = 0
end = N - 2
# ํฌ์ธํฐ๊ฐ ๊ต์ฐจ๋๊ธฐ ์ ๊น์ง ํ์
while end > start:
# ์ข์ ์ซ์์ธ ๊ฒฝ์ฐ
if numbers[start] + numbers[end] == target:
good += 1
break
# ๋ ์ซ์์ ํฉ์ด ๋ชฉํ ์ซ์๋ณด๋ค ํด ๊ฒฝ์ฐ end ํฌ์ธํฐ๋ฅผ ์ข๋ก ํ ์นธ ์ด๋
elif numbers[start] + numbers[end] > target:
end -= 1
# ๋ ์ซ์์ ํฉ์ด ๋ชฉํ ์ซ์๋ณด๋ค ์์ ๊ฒฝ์ฐ start ํฌ์ธํฐ๋ฅผ ์ฐ๋ก ํ ์นธ ์ด๋
else:
start += 1
# ํ์์ ๋ง์ณค์ผ๋ฉด ์ซ์๋ฅผ ๋ค์ ๋ฆฌ์คํธ์ ๋ฃ๋๋ค.
numbers.insert(i, target)
# ์ข์ ์ซ์ ๊ฐฏ์ ์ถ๋ ฅ
print(good)
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2239 ์ค๋์ฟ (Python/ํ์ด์ฌ) (0) | 2022.11.10 |
---|---|
[๋ฐฑ์ค] 11559 Puyo Puyo (Python/ํ์ด์ฌ) (0) | 2022.11.10 |
[๋ฐฑ์ค] 1368 ๋ฌผ๋๊ธฐ (Python/ํ์ด์ฌ) (0) | 2022.10.16 |
[๋ฐฑ์ค] 2252 ์ค ์ธ์ฐ๊ธฐ (Python/ํ์ด์ฌ) (0) | 2022.10.15 |
[๋ฐฑ์ค] 17471 ๊ฒ๋ฆฌ๋งจ๋๋ง (Python/ํ์ด์ฌ) (0) | 2022.10.14 |
๋๊ธ