Given the triangle of consecutive odd numbers:
1
3 5
7 9 11
13 15 17 19
21 23 25 27 29
Calculate the row sums of this triangle from the row index (starting at index 1) e.g.:
rowSumOddNumbers(1); // 1
rowSumOddNumbers(2); // 3 + 5 = 8
위 삼각형은 구성이 모두 홀수로 되어 있다. 또한 삼각형에서 n열이라고 했을 때, 그 열은 n개의 홀수로 구성되어 있다. 또한 등차수열로 홀수가 구성되어 있기 때문에 열의 합을 구하기 위해서 그 열의 시작이 몇 번째인지를 알아내는 것이 키포인트였다. 주어진 n을 기준으로 0
부터 n-1
까지의 합이 시작점을 나타내고 있음을 알아내었다. 위의 생각을 구현한 코드이다.
function rowSumOddNumbers(n) {
let startNum = 0, sum = 0;
// 시작점 구하기
for(let i = 0; i < n; i++){
startNum += i;
}
// n번째줄 홀수의 총합
for(let i = startNum; i< startNum + n; i++){
sum += (2*i+1);
}
return sum;
}
function rowSumOddNumbers(n) {
return Math.pow(n, 3);
}
띠옹? 이거는 무슨 풀이인고?? 처음에 답안을 제출하고 뭔가 다른 풀이를 기대하고 있었지만 한 줄짜리 풀이는 아니였다. 내 생각엔 위의 풀이는 결과적인 것을 일반화한 풀이 같다
1 = 1 = 1^3
3 5 = 8 = 2^3
7 9 11 = 27 = 3^3
13 15 17 19 = 64 = 4^3
21 23 25 27 29 = 125 = 5^3
위의 삼각형을 보면 이렇게 일반화할 수 있다. 개인적으로 문제 풀이 중에 이런걸 발견 한다는 것은 쉽지 않은 것 같다. 어떤 이론적인 배경이 있는지에 대해서 찾아봤는데, 딱히 그런것은 있는 것 같지 않았다. 고수(?) 친구분들의 이야기론 이 문제는 프로그래밍 문제라기보다 수학 문제인 것이 맞으면 저런 풀이를 생각하기에는 수학을 잘해야 한다(?) 라는 의견이 많았다. 또한 이런 부류의 문제를 풀다보면 이러한 '공식' 같은 것들을 경험적으로 알게 된다 라고 하였다.
수학 문제를 푼 기분이다. 문제를 푼 시간보다 n^3이 왜 나왔는지를 생각한 시간이 더 많은 것 같다. 요즘에 문제를 풀 시간이 그렇게 많지 않아서 낮은 등급의 문제를 풀고 있는데, 거기에는 수학적 문제들이 좀 많은듯하다. ( Codewars에는 등급제로 문제를 풀면 풀수록 경험치가 쌓이고 그에 따라 승급하게 된다. 나는 이번에 5kyu까지 올라갔다! 😎) 어제 오늘 모두 수학 문제의 느낌이다.
🚀 문제를 풀어나갈 때 생각의 흐름을 정리합니다. 또한 새로운 풀이에 대한 코드를 분석하고 모르는 부분에 대해서 정리합니다. 생각이 다른 부분에 대한 피드백은 언제나 환영합니다. 틀린 내용에 대한 피드백 또한 항상 감사합니다.