๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ๋ฐฑ์ค€ 3273๋ฒˆ - ๋‘ ์ˆ˜์˜ ํ•ฉ

by hyebin (Helia) 2023. 3. 26.
๋ฐ˜์‘ํ˜•
๋ฐฑ์ค€ ๋ฌธ์ œ ๋ชจ์Œ

๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/3273

 

3273๋ฒˆ: ๋‘ ์ˆ˜์˜ ํ•ฉ

n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์–‘์˜ ์ •์ˆ˜ a1, a2, ..., an์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์žˆ๋‹ค. ai์˜ ๊ฐ’์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ž์—ฐ์ˆ˜ x๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ai + aj = x (1 ≤ i < j ≤ n)์„ ๋งŒ์กฑํ•˜๋Š”

www.acmicpc.net

 

๋ฌธ์ œ

n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์–‘์˜ ์ •์ˆ˜ a1, a2,..., an์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์žˆ๋‹ค. ai์˜ ๊ฐ’์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ž์—ฐ์ˆ˜ x๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ai + aj = x (1 ≤ i < j ≤ n)์„ ๋งŒ์กฑํ•˜๋Š” (ai, aj) ์Œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด์˜ ํฌ๊ธฐ n์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ์ˆ˜์—ด์— ํฌํ•จ๋˜๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„์—๋Š” x๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)

์ถœ๋ ฅ

๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

  • ์ •๋ ฌ
  • ํˆฌ ํฌ์ธํ„ฐ

๋ฌธ์ œ ํ’€์ด

  • ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜ n์„ ์ž…๋ ฅ๋ฐ›๊ณ , ์ˆ˜์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ ์ •๋ ฌํ•œ ํ›„ arr์— ์ €์žฅํ•œ๋‹ค. ์ฐพ์œผ๋ ค๋Š” ์ˆ˜ x๋„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • start๋Š” 0, end๋Š” n-1๋กœ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.
  • arr[start] + arr[end]๊ฐ€ x ๋ผ๋ฉด, result๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ , start๋Š” 1 ์ฆ๊ฐ€, end๋Š” 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
  • ๋”ํ•œ ๊ฐ’์ด x๋ณด๋‹ค ์ž‘๋‹ค๋ฉด start๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ ,  ์•„๋‹ˆ๋ผ๋ฉด end๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

์†Œ์Šค์ฝ”๋“œ

let n = Int(readLine()!)!
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}.sorted()
let x = Int(readLine()!)!
var result = 0
var start = 0, end = n-1

while start < end {
    switch arr[start] + arr[end] {
    case x:
        result += 1
        start += 1
        end -= 1
    case ..<x:
        start += 1
    default:
        end -= 1
    }
}
print(result)
๋ฐ˜์‘ํ˜•