Bibi's DevLog πŸ€“πŸŽ

[λ°±μ€€ 2355] μ‹œκ·Έλ§ˆ λ³Έλ¬Έ

ν”„λ‘œκ·Έλž˜λ°/μ•Œκ³ λ¦¬μ¦˜ 풀이 Swift

[λ°±μ€€ 2355] μ‹œκ·Έλ§ˆ

λΉ„λΉ„ bibi 2022. 9. 6. 12:33

2355번: μ‹œκ·Έλ§ˆ

μ‹œκ·Έλ§ˆ 곡식을 ν™œμš©ν•˜λŠ” 문제.

κ°€μš°μŠ€ λ§μ…ˆ 곡식, μ‹œκ·Έλ§ˆ (βˆ‘)

μ²˜μŒμ—λŠ” 반볡문으둜 ν’€μ—ˆλŠ”λ° λ„ˆλ¬΄ μ‰¬μ›Œμ„œ μ΄μƒν•˜λ‹€ ν–ˆλ”λ‹ˆ λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

  • μ‹œκ°„μ œν•œμ— 걸리면 ν‹€λ ΈμŠ΅λ‹ˆλ‹€ κ°€ μ•„λ‹Œ λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

λͺ¨λ₯΄κ² μ–΄μ„œ 검색을 ν–ˆκ³  μ‹œκ·Έλ§ˆ 곡식을 ν™œμš©ν•˜λŠ” λ¬Έμ œμ˜€λ‹€.

(κ°€μš°μŠ€ λ§μ…ˆμ΄λΌκ³  검색해도 λ‚˜μ˜¨λ‹€)

  • κ°€μš°μŠ€ λ§μ…ˆ 곡식
    • n < m 일 λ•Œ, nλΆ€ν„° mκΉŒμ§€μ˜ μ •μˆ˜λ₯Ό λͺ¨λ‘ λ”ν•œ 값은
    • (n + m) * (m - n + 1) / 2
  • μ‹œκ·Έλ§ˆ 곡식
    • n < m 일 λ•Œ, nλΆ€ν„° mκΉŒμ§€μ˜ μ •μˆ˜λ₯Ό λͺ¨λ‘ λ”ν•œ 값은
    • 1λΆ€ν„° mκΉŒμ§€μ˜ ν•© - 1λΆ€ν„° n-1κΉŒμ§€μ˜ ν•©κ³Ό κ°™λ‹€ (1 + … + m) - (1 + … + n-1)
    • = [m(m + 1) / 2] - [n-1(n-1 + 1) / 2]
    • = [m(m + 1) / 2] - [n-1(n) / 2]
  • μ—¬κΈ°μ„œ a와 b쀑 무엇이 더 큰지 λͺ¨λ₯΄λ―€λ‘œ, λŒ€μ†ŒλΉ„κ΅λ₯Ό ν•œ λ‹€μŒ κ³΅μ‹μœΌλ‘œ μ μš©ν•œλ‹€.

풀이1 (μ‹œκ°„μ΄ˆκ³Ό)

let inputArr = readLine()!.split(separator: " ").map { Int($0)! }
print((inputArr[0]...inputArr[1]).reduce(0, +))
  • for문으둜 ν’€λ©΄ μ‹œκ°„μ œν•œμ„ ν†΅κ³Όν•˜μ§€ λͺ»ν•΄ λŸ°νƒ€μž„ μ—λŸ¬ λ°œμƒ

풀이2

  • a와 bλ₯Ό λŒ€μ†ŒλΉ„κ΅ν•˜μ—¬ 각 κ²½μš°μ— λ‹€λ₯Έ 곡식 적용
let inputArr = readLine()!.split(separator: " ").map { Int($0)! }
let a = inputArr[0]
let b = inputArr[1]
if a < b {
    print((b * (b + 1)) / 2 - (a * (a - 1)) / 2)
} else {
    print((a * (a + 1)) / 2 - (b * (b - 1)) / 2)
}

풀이3

  • bκ°€ λ°˜λ“œμ‹œ a보닀 큰 μˆ˜κ°€ λ˜λ„λ‘ 보μž₯ν•œ λ’€ ν•˜λ‚˜μ˜ 곡식 적용
let inputArr = readLine()!.split(separator: " ").map { Int($0)! }
let a = inputArr.min()!
let b = inputArr.max()!
print((b * (b + 1)) / 2 - (a * (a - 1)) / 2)