인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

윤영훈님의 프로필 이미지
윤영훈

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

6. 격자판 최대합

코드 리뷰 부탁드립니다!

작성

·

189

1

// 각 행의 합,
// 각 열의 합,
// 두 대각선의 합
function solution(arr) {
  let row = [];
  let col = [];
  let cross = [];

  let colSum = 0;
  let crossLeft = 0;
  let crossRight = 0;

  // 각 행의 합
  for (let i = 0; i < arr.length; i++) {
    let sum = arr[i].reduce((acc, cur) => acc + cur);
    row.push(sum);
  }

  // 각 열의 합
  for (let i = 0; i < arr.length; i++) {
    colSum = 0;
    for (let j = 0; j < arr.length; j++) {
      colSum += arr[j][i];
    }
    col.push(colSum);
  }

  // 두 대각선의 합
  for (let i = 0; i < arr.length; i++) {
    crossLeft += arr[i][i];
  }
  cross.push(crossLeft);

  for (let j = arr.length - 1; j !== 0; j--) {
    crossRight += arr[j][j];
  }
  cross.push(crossRight);

  console.log(row);
  console.log(col);
  console.log(cross);
  return Math.max(...row, ...col, ...cross);
}

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

reduce 메서드의 시간복잡도가 O(n)입니다. 

뭐 시간복잡도를 따질 문제는 아니지만 이중for문을 한 번만 돌리면서 행, 열, 대각선의 합을 한꺼번에 구해버리는 방법을 생각해 보는 것도 좋을 것 같습니다.

위에 코드도 잘하신 코드입니다

윤영훈님의 프로필 이미지
윤영훈

작성한 질문수

질문하기