인프런 커뮤니티 질문&답변
코드의 효율성
작성
·
216
2
이렇게 코드를 짰는데 잘 짠 코드인지 궁금합니다.
시간복잡도는 O(n2)이 되는 것인가요 !?
function solution(arr) {
// 각 행의 합 = row, i는 고정 j는 0~배열의 길이만큼
// 각 열의 합 = column, j는 고정 i는 0~배열의 길이만큼
// 대각선의 합 = cross i와 j가 같아야한다.
// 거꾸로 대각선의 합 = reverseCross, arr.length - i - 1
let row = new Array(arr.length).fill(0);
let column = new Array(arr.length).fill(0);
let cross = 0;
let reverseCross = 0;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (i === j) {
cross += arr[i][j];
reverseCross += arr[i][arr.length - i - 1];
}
row[i] += arr[i][j];
column[i] += arr[j][i];
}
}
return Math.max(...row, ...column, cross, reverseCross);
}퀴즈
64%나 틀려요. 한번 도전해보세요!
배열을 순회하며 이전에 나온 모든 수보다 큰 수들의 개수를 효율적으로 세는 방법은 무엇일까요?
배열을 정렬한 후 앞에서부터 순서대로 센다.
현재까지 나타난 수들 중 최대값을 기록하며 순회한다.
각 수를 배열의 모든 다른 수와 비교하여 개수를 센다.
배열의 첫 번째 수만 확인하여 결정한다.





