๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1253 ์ข‹๋‹ค (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 11. 8.

<๋ฌธ์ œ ๋งํฌ>

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)

๋Œ“๊ธ€