(Swift) 백준 10448 유레카 이론

SteadySlower·2022년 6월 1일
0

Coding Test

목록 보기
52/298

10448번: 유레카 이론

// 유레카 이론

/*
 ❓ 수열로 접근을 해볼까?
 3개의 삼각수로 표현할 수 있는 수
 T1 T1 T1 = 3
 T1 T1 T2 = 5 -> + 2
 T1 T2 T2 = 7 -> + 2
 T2 T2 T2 = 9 -> + 2
 T2 T2 T3 = 12 -> + 3
 🚫 이렇게 하는 경우에는 T1 + T1 + T1000 -> 같은 경우의 수가 빠짐
 
 ❗️Tn들을 array에 넣어두고 조합으로 3개 뽑아서 더해야 함
 */

let T = Int(readLine()!)!

//✅ 1000 이하의 모든 삼각수를 array에 넣는다.
var triNumArray = [Int]()
var n = 1
var triNum: Int

repeat {
    triNum = n * (n + 1) / 2
    n += 1
    triNumArray.append(triNum)
} while triNum <= 1000

//✅ 삼각수 3개를 조합 (combination)하여 만들 수 있는 1000이하의 수를 array에 넣는다.
var sumArray = [Int]()
var sum: Int

for i in 0..<triNumArray.count {
    for j in i..<triNumArray.count {
        for k in j..<triNumArray.count {
            sum = triNumArray[i] + triNumArray[j] + triNumArray[k]
            if sum <= 1000 {
                sumArray.append(sum)
            }
        }
    }
}

//✅ 주어진 입력값 k가 sumArray에 있는지 확인한다.
for _ in 0..<T {
    let k = Int(readLine()!)!
    print(sumArray.contains(k) ? 1 : 0)
}
  1. 처음에는 수열의 관점에서 접근하려고 했으나 삼각수 3개의 합은 규칙적으로 증가하는 수열이 아니었습니다.
  2. k가 1000 밖에 되지 않으므로 모든 경우의 수를 다 찾아 놓고 입력값을 거기서 찾는 것이 가능합니다.
  3. 먼저 1000이하의 삼각수들을 모두 구합니다.
  4. 1000이하의 삼각수를 3개를 조합하여 (중복허용) 1000이하의 모든 삼각수 3개의 합을 구합니다.
  5. 마지막으로 k를 입력 받으면서 삼각수 3개의 합에 해당 수가 있는지 확입니다.
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글