최근에 코딩테스트를 몇개 봤는데 그 중에서 기억나는 문제 그당시에는 해결하지 못한 개선점 하나 써보고자 한다.
문제는 간단하다! 파스칼의 삼각형 array를 구현하는 것이다.
row 값을 입력했을 때, 파스칼의 삼각형을 구성하는 수들을 배열로 만들기
getPascalArray(1); // [[1]]
getPascalArray(4); // [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]
파스칼의 삼각형이라 함은 서로 옆에 있는 수 두개를 더해서 아래의 수를 만들어 나가는 삼각형이다.
서로 옆에 있는 수 두개를 더해서 아래의 수를 만들어 나가는 삼각형
이기 때문에서로 옆에 있는 수 두개를 더해서 아래의 수를 만들어 내는
함수를 만들었다.const getPascalNum = (row, col) => {
if (col === 1 || col === row) return 1;
return getPascalNum(row - 1, col - 1) + getPascalNum(row - 1, col);
};
const getPascalArray = (row) => {
const result = [];
for (let i = 1; i <= row; i++) {
const temp = [];
for (let j = 1; j <= i; j++) {
temp.push(getPascalNum(i, j));
}
result.push(temp);
}
return result;
};
내가 제출한 함수는 위와 같다.
const getPascalArray2 = (row) => {
const result = [];
for (let i = 0; i < row; i++) {
const temp = [];
for (let j = 0; j <= i; j++) {
if (j === 0 || j === i) {
temp.push(1);
} else {
const prevRow = result[i - 1];
const sum = prevRow[j - 1] + prevRow[j];
temp.push(sum);
}
}
result.push(temp);
}
return result;
};
이게 내가 만든 웹사이트에 필요한 계산이었다면 어떻게 됐을까? 조금만 값이 커져도 성능이 급격히 떨어지며 사용자들이 우수수 이탈했을 것이다 ㅠㅠ 불필요한 계산의 무서움을 알 수 있었던 경험이었다 ~! 단순히 기능이 어찌저찌 돌아가면 끝. 이 아니라 계속해서 문제점을 찾아서 개선해 나가야겠다고 다짐