MUKER_DEV with iOS

[swift] λ°±μ€€ - 10448번: 유레카 이둠 λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 10448번: 유레카 이둠

MUKER 2023. 7. 19. 11:46
문제 링크
 

10448번: 유레카 이둠

ν”„λ‘œκ·Έλž¨μ€ ν‘œμ€€μž…λ ₯을 μ‚¬μš©ν•œλ‹€. ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ˜ κ°œμˆ˜λŠ” μž…λ ₯의 첫 번째 쀄에 주어진닀. 각 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λŠ” ν•œ 쀄에 μžμ—°μˆ˜ K (3 ≤ K ≤ 1,000)κ°€ ν•˜λ‚˜μ”© ν¬ν•¨λ˜μ–΄μžˆλŠ” T개의 라인으둜 κ΅¬μ„±λ˜μ–΄

www.acmicpc.net


문제

μ‚Όκ°μˆ˜ Tn(n ≥ 1)λŠ” [κ·Έλ¦Ό]μ—μ„œμ™€ 같이 κΈ°ν•˜ν•™μ μœΌλ‘œ μΌμ •ν•œ λͺ¨μ–‘μ˜ κ·œμΉ™μ„ κ°–λŠ” μ λ“€μ˜ λͺ¨μŒμœΌλ‘œ ν‘œν˜„λ  수 μžˆλ‹€.

[κ·Έλ¦Ό]

μžμ—°μˆ˜ n에 λŒ€ν•΄ n ≥ 1의 μ‚Όκ°μˆ˜ TnλŠ” λͺ…λ°±ν•œ 곡식이 μžˆλ‹€.

Tn = 1 + 2 + 3 + ... + n = n(n+1)/2

1796λ…„, κ°€μš°μŠ€λŠ” λͺ¨λ“  μžμ—°μˆ˜κ°€ μ΅œλŒ€ 3개의 μ‚Όκ°μˆ˜μ˜ ν•©μœΌλ‘œ ν‘œν˜„λ  수 μžˆλ‹€κ³  증λͺ…ν•˜μ˜€λ‹€. 예λ₯Ό λ“€μ–΄,

  • 4 = T1 + T2
  • 5 = T1 + T1 + T2
  • 6 = T2 + T2 or 6 = T3
  • 10 = T1 + T2 + T3 or 10 = T4

이 κ²°κ³ΌλŠ” 증λͺ…을 κΈ°λ…ν•˜κΈ° μœ„ν•΄ 그의 닀이어리에 “Eureka! num = Δ + Δ + Δ” 라고 μ μ€κ²ƒμ—μ„œ 유레카 이둠으둜 μ•Œλ €μ‘Œλ‹€. 꿍은 λͺ‡λͺ‡ μžμ—°μˆ˜κ°€ μ •ν™•νžˆ 3개의 μ‚Όκ°μˆ˜μ˜ ν•©μœΌλ‘œ ν‘œν˜„λ  수 μžˆλŠ”μ§€ κΆκΈˆν•΄μ‘Œλ‹€. μœ„μ˜ μ˜ˆμ‹œμ—μ„œ, 5와 10은 μ •ν™•νžˆ 3개의 μ‚Όκ°μˆ˜μ˜ ν•©μœΌλ‘œ ν‘œν˜„λ  수 μžˆμ§€λ§Œ 4와 6은 그렇지 μ•Šλ‹€.

μžμ—°μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έ μ •μˆ˜κ°€ μ •ν™•νžˆ 3개의 μ‚Όκ°μˆ˜μ˜ ν•©μœΌλ‘œ ν‘œν˜„λ  수 μžˆλŠ”μ§€ μ—†λŠ”μ§€λ₯Ό νŒλ‹¨ν•΄μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄λΌ. 단, 3개의 μ‚Όκ°μˆ˜κ°€ λͺ¨λ‘ 달라야 ν•  ν•„μš”λŠ” μ—†λ‹€.

μž…λ ₯

ν”„λ‘œκ·Έλž¨μ€ ν‘œμ€€μž…λ ₯을 μ‚¬μš©ν•œλ‹€. ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ˜ κ°œμˆ˜λŠ” μž…λ ₯의 첫 번째 쀄에 주어진닀. 각 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λŠ” ν•œ 쀄에 μžμ—°μˆ˜ K (3 ≤ K ≤ 1,000)κ°€ ν•˜λ‚˜μ”© ν¬ν•¨λ˜μ–΄μžˆλŠ” T개의 라인으둜 κ΅¬μ„±λ˜μ–΄μžˆλ‹€.

좜λ ₯

ν”„λ‘œκ·Έλž¨μ€ ν‘œμ€€μΆœλ ₯을 μ‚¬μš©ν•œλ‹€. 각 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ—λŒ€ν•΄ μ •ν™•νžˆ ν•œ 라인을 좜λ ₯ν•œλ‹€. λ§Œμ•½ Kκ°€ μ •ν™•νžˆ 3개의 μ‚Όκ°μˆ˜μ˜ ν•©μœΌλ‘œ ν‘œν˜„λ μˆ˜ μžˆλ‹€λ©΄ 1을, 그렇지 μ•Šλ‹€λ©΄ 0을 좜λ ₯ν•œλ‹€.

예제


성곡 풀이

var nums = [Int]()

for i in 1...45 {
    nums.append(i*(i+1)/2)
}

for _ in 0..<Int(readLine()!)! {
    let N = Int(readLine()!)!
    var result = 0
loop: for i in 0..<45 {
        for j in 0..<45 {
            for k in 0..<45 {
                if nums[i]+nums[j]+nums[k] == N {
                    result = 1
                    break loop
                }
            }
        }
    }
    print(result)
}

풀이 ν‚€μ›Œλ“œ

  • μ‚Όκ°μˆ˜λ₯Ό 45λ²ˆκΉŒμ§€ κ΅¬ν–ˆμ„ λ•Œ K의 μ΅œλŒ“κ°’μΈ 1,000을 μ΄ˆκ³Όν•˜κΈ° λ•Œλ¬Έμ—, 1,000번째 μ‚Όκ°μˆ˜κΉŒμ§€ 배열에 ν• λ‹Ήν•΄ μ€¬μŠ΅λ‹ˆλ‹€.
  • 3개의 경우의 수λ₯Ό μ°ΎκΈ° μœ„ν•΄ 3 쀑첩 λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•΄ 완전탐색을 ν•΄μ€¬μŠ΅λ‹ˆλ‹€.