๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ๋‘ ์ˆ˜์˜ ํ•ฉ BOJ #3273

by seolhee2750 2021. 7. 30.
๋ฌธ์ œ ์„ค๋ช…

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)

 

์ถœ๋ ฅ

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

 

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

์ž…๋ ฅ

9
5 12 7 10 9 1 2 3 11
13

 ์ถœ๋ ฅ

3

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

let count = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: " ").map({Int($0)!}).sorted()
let sum = Int(readLine()!)!
var max = nums.count

var result = 0

for i in 0..<nums.count-1 {
    if i < max {
        for j in (i+1..<max).reversed() {
            if i < j {
                if nums[i] + nums[j] == sum {
                    result += 1
                    max = j
                    break
                }
            }
        }
    }
}

print(result)
  • ์ด๋ถ„ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ–ˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ํƒ์ƒ‰์„ ์œ„ํ•˜์—ฌ ๋จผ์ € ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ๋‹ค.
  • 2์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ฐ”๊นฅ for๋ฌธ์—์„œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ 
    ์•ˆ์ชฝ for๋ฌธ์—์„œ๋Š” ๋’ค์—์„œ๋ถ€ํ„ฐ ๋ฐ˜๋Œ€๋กœ ๊ฒ€์‚ฌํ–ˆ๋‹ค.
  • ์–ด์ฐจํ”ผ ํ•œ ๋ฒˆ ์Œ์ด ๋งบ์–ด์ง„ ์ˆซ์ž๋Š” ๋”์ด์ƒ ๋‹ค๋ฅธ ์ˆซ์ž์™€๋Š”
    ์Œ์ด ๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— (์ค‘๋ณต๋˜๋Š” ์ˆ˜๋Š” ์ž…๋ ฅ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ)
    ์•ˆ์ชฝ for๋ฌธ์—์„œ, ์Œ์ด ๋งบ์–ด์ง์„ ํ™•์ธํ•  ๋•Œ๋งˆ๋‹ค max๋ฅผ ๋ฐ”๊ฟ”์ฃผ์–ด ์“ธ๋ฐ์—†๋Š” ๋ฐ˜๋ณต์€ ํ”ผํ–ˆ๋‹ค.
  • ๊ณ„์† ์Œ์„ ๋งบ์œผ๋ฉฐ max๋ฅผ ๋‚ฎ์€ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ฃผ๋‹ค๋ณด๋ฉด ์–ธ์  ๊ฐ€ i๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,
    i < max ๋ผ๋Š” ์กฐ๊ฑด์„ ๋‘ ๋ฒˆ์งธ for๋ฌธ ์ „์— ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ฒ˜์Œ์—” ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ’€ ์ƒ๊ฐ์„ ๋ชปํ•˜๊ณ , ๊ทธ๋ƒฅ ์ˆœ์ฐจ๋Œ€๋กœ ๊ฒ€์‚ฌํ•˜๋Š” for๋ฌธ์„ 2์ค‘์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ,
    ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊นŒ ์ž๊พธ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
  • ๊ตฌ๊ธ€๋งํ•ด์„œ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ’€์–ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ์•Œ์•„๋‚ด์–ด ํ’€์—ˆ๋Š”๋ฐ,
    ์ด ๋ฌธ์ œ๋ฅผ ์žŠ์„ ์ฆˆ์Œ์— ๋‹ค์‹œ ํ’€์–ด์„œ ์ด๋ถ„ํƒ์ƒ‰์„ ์ •ํ™•ํžˆ ์ตํ˜€๋ด์•ผ๊ฒ ๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€