Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1744๋ฒˆ - ์ˆ˜ ๋ฌถ๊ธฐ (๊ณจ๋“œ4, ๊ทธ๋ฆฌ๋””)

๊ฐ์ž ๐Ÿฅ” 2023. 5. 16. 18:00
๋ฐ˜์‘ํ˜•

 

โšซ๏ธ ๋ฌธ์ œ

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

 

1744๋ฒˆ: ์ˆ˜ ๋ฌถ๊ธฐ

๊ธธ์ด๊ฐ€ N์ธ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๋ƒฅ ๊ทธ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๋ชจ๋‘ ๋”ํ•ด์„œ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ˆ˜์—ด์˜ ๋‘ ์ˆ˜๋ฅผ ๋ฌถ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ์ˆ˜๋ฅผ ๋ฌถ์œผ๋ ค๊ณ  ํ•  ๋•Œ, ์œ„์น˜์—

www.acmicpc.net

 

โšซ๏ธ ๋‚˜์˜ ํ’€์ด

ํ’€์ด ๋ฐฉ์‹์€ ๋ฐ”๋กœ ์ƒ๊ฐ๋‚ฌ๋‹ค. ํ•ต์‹ฌ์€ -๋Š” -๋ผ๋ฆฌ ๊ณฑํ–ˆ์„ ๋•Œ ์–‘์ˆ˜๊ฐ€ ๋˜๊ณ , 0์ด ์ž…๋ ฅ๋˜๋Š” ๊ฒฝ์šฐ minus์ธ ์ˆ˜๋ž‘ ๊ณฑํ•ด์ฃผ๋ฉด ๊ฐœ์ด๋“์ด๋ผ๋Š” ์‚ฌ์‹ค!

  • input์„ minus์™€ 0, plus๋กœ ๋‚˜๋ˆ ์„œ ๋ฐ›์•˜๊ณ , ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
  • ์šฐ์„  ์ˆ˜๋ฅผ ๊ณฑํ•ด์ฃผ๋Š”๊ฒŒ ๊ทธ๋ƒฅ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ํ›จ์”ฌ ์ด๋“์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์ฃผ์–ด์ง„ input์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ, ํฐ์ˆ˜๋“ค์€ ๋ฌถ์–ด์„œ ์ตœ๋Œ€ ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์ œ์ผ ์ž‘์€์ˆ˜๋งŒ ๋‹จ์ผ๋กœ ๋”ํ•ด์ฃผ์ž.
  • minus๋Š” ๊ทธ ๋ฐ˜๋Œ€, ์ œ์ผ ์ž‘์€์ˆ˜ ๋‘๊ฐœ๋ฅผ ๋ฌถ์–ด์„œ ์ตœ๋Œ€์–‘์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ๋งŒ์•ฝ ํ™€์ˆ˜์ธ๊ฒฝ์šฐ ์ œ์ผ ํฐ์ˆ˜๋ฅผ ๊ทธ๋ƒฅ ๋‹จ์ผ๋กœ ๋”ํ•ด์ฃผ์ž.

์ด ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ? ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

โŒ 1์ฐจ์‹œ๋„ - ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค.

import Foundation

private func solution() -> Int {
    let n = Int(readLine()!)!
    var minusNums = [Int]()
    var plusNums = [Int]()

    for _ in 0..<n {
        let input = Int(readLine()!)!
        // 0 ์ด๋ฉด ๋งˆ์ด๋„ˆ์Šค๋ž‘ ๊ณฑํ•ด์ฃผ๋Š”๊ฒŒ ๊ฐœ์ด๋“
        if input <= 0 {
            minusNums.append(input)
        } else {
            plusNums.append(input)
        }
    }

    var sum = 0
    minusNums = minusNums.sorted(by: <)
    plusNums = plusNums.sorted(by: >)

    var idx = 0
    while idx < minusNums.count {
        if idx + 1 < minusNums.count {
            sum += minusNums[idx] * minusNums[idx+1]
        } else if idx + 1 >= minusNums.count {
            sum += minusNums[idx]
        }

        idx += 2
    }

    idx = 0
    while idx < plusNums.count {
        if idx + 1 < plusNums.count {
            sum += plusNums[idx] * plusNums[idx+1]
        } else if idx + 1 >= plusNums.count {
            sum += plusNums[idx]
        }

        idx += 2
    }

    return sum
}

print(solution())

ํ ,, ํ‹€๋ ธ๋‹ค. ์›ํ•˜๋Š” ๋‹ต์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๋ชจ์–‘์ด๋‹ค. 

๋‹ค์Œ๋‚ ...  2์ฐจ์‹œ๋„ - ๋งž์•˜์Šต๋‹ˆ๋‹ค!

์•„๋‹ˆ ์ด์ „์— ๊ณต์ฃผ๋‹˜ ๋ฌธ์ œ๋„ ๊ทธ๋žฌ๋“ฏ, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๊ฐ€ ์•ˆํ’€๋ฆฌ๊ณ  ๋‹ต๋‹ตํ•˜๊ณ  ๋ชจ๋ฅด๊ฒ ์œผ๋ฉด ๋‹ค์Œ๋‚  ํ‘ธ๋Š”๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ธ๊ฒƒ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ๊นŠ๊ฒŒํ•œ ํ„ฐ๋ผ ๋ฌธ์ œ๋ฅผ ๊นŒ๋จน์ง„ ์•Š์„ํ…Œ๊ณ , ์กฐ๊ธˆ ๋” ๋จธ๋ฆฌ๊ฐ€ ๊ฐ€๋ฒผ์›Œ์ง„ ์ƒํƒœ์—์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ?? ์ด๋ ‡๊ฒŒ ๋ฌธ์ œ ์•ˆํ’€๋ฆฌ๋ฉด ์•ž์œผ๋กœ ๋‹ค์Œ๋‚ ๋กœ ๋ฏธ๋ค„๋ด์•ผ๊ฒ ๋‹ค ^0^/

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๋ฌธ์ œ๋„ ๋ณด์ž๋งˆ์ž ํ‹€๋ฆฐ ๋ถ€๋ถ„์„ ๋ฐ”๋กœ ํŒŒ์•…ํ–ˆ๋‹ค. 0์€ ๋งˆ์ด๋„ˆ์Šค๋‹ฌ๋ฆฐ ๋†ˆ์—๊ฒŒ ๊ณฑํ•ด์ฃผ๋ฉด 0์ด ๋˜์–ด๋ฒ„๋ ค์„œ ์ด๋“์ด๋‹ค. ํ•˜์ง€๋งŒ 1์€? 1์€ ์ˆ˜๋ฅผ ๋ฌถ์–ด์ฃผ๊ธฐ๋ณด๋‹ค๋Š”, ๋”ฐ๋กœ ๋”ํ•ด์ฃผ๋Š”๊ฒŒ ๊ฐ€์žฅ ์ตœ๋Œ€์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ,,,, ํ˜„์žฌ ๋‚ด๊ฐ€ ๊ทธ๋ƒฅ ์จ๋†จ๋˜ ์ฝ”๋“œ๋Š” 1๋„ ๋ชจ๋‘ ๊ณฑํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋‹ต์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ์ง€๊ธˆ ๋‚ด๊ฐ€ ์จ๋†จ๋˜ ํ’€์ด๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ , ์ถ”๊ฐ€๋กœ 1์„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด์„œ ๋”ํ•ด์ฃผ๋ฉด ์ตœ๋Œ€๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

import Foundation

private func solution() -> Int {
    let n = Int(readLine()!)!
    var minusNums = [Int]()
    var plusNums = [Int]()
    var ones = [Int]()

    for _ in 0..<n {
        let input = Int(readLine()!)!
        // 0 ์ด๋ฉด ๋งˆ์ด๋„ˆ์Šค๋ž‘ ๊ณฑํ•ด์ฃผ๋Š”๊ฒŒ ๊ฐœ์ด๋“
        if input <= 0 {
            minusNums.append(input)
        } else if input == 1 {
        // 1์€ ๊ทธ๋ƒฅ ๋”ํ•ด์ฃผ๋Š”๊ฒŒ ๊ฐœ์ด๋“
            ones.append(input)
        } else {
            plusNums.append(input)
        }
    }

    var sum = 0
    minusNums = minusNums.sorted(by: <)
    plusNums = plusNums.sorted(by: >)

    // minus ์ฒ˜๋ฆฌ
    var idx = 0
    while idx < minusNums.count {
        if idx + 1 < minusNums.count {
            sum += minusNums[idx] * minusNums[idx+1]
        } else if idx + 1 >= minusNums.count {
            sum += minusNums[idx]
        }

        idx += 2
    }

    // plus ์ฒ˜๋ฆฌ
    idx = 0
    while idx < plusNums.count {
        if idx + 1 < plusNums.count {
            sum += plusNums[idx] * plusNums[idx+1]
        } else if idx + 1 >= plusNums.count {
            sum += plusNums[idx]
        }

        idx += 2
    }
    
    // 1์€ ๋”ฐ๋กœ ๋”ํ•ด์ฃผ๊ธฐ~
    return sum + ones.count
}

print(solution())

 

 

์šฐ์•„์•„~~ ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณจ๋“œ ๋ฌธ์ œ ํ•ด๊ฒฐ!

๋ฐ˜์‘ํ˜•