ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JavaScript 알고리즘 | 22_바둑판 최대값 구하기(가로,세로,대각선)
    ► JS Algorithm/Basic 2022. 9. 25. 22:39
    반응형

    🔒 Q

    바둑판의 모든 행의 합, 모든 열의 합, X방향의 대각선의 합 중 가장 큰 값을 구하세요.

    🔒 ex

    입력값 [11, 12, 13, 14, 15],
    [16, 17, 18, 19, 20],
    [29, 28, 27, 26, 25],
    [24, 23, 22, 21, 20],
    [15, 18, 19, 14, 13]
    출력값 135

    🔒 Solution

    ▼나의풀이

          function solution(a) {
            let answer = Number; //정답
            let table = a; //표
            let allArr = []; //가로,세로,대각선 각각 합의 묶음
    
            //각각 row행의 합 묶음
            let horizontalLines = [];
            for (let i of table) {
              horizontalLines.push(i.reduce((a, b) => a + b));
            }
    
            //각각 column열의 합 묶음
            let verticalLines = [];
            let index = 0;
            for (let i = 0; i < table.length; i++) {
              let arr1 = [];
              for (let j = 0; j < table.length; j++) {
                arr1.push(table[j][index]);
              }
              verticalLines.push(arr1.reduce((a, b) => a + b));
              index++;
            }
    
            // 대각선 합 (정방향original)
            let diagonalLine1 = Number;
            let arr2 = [];
            for (let i = 0; i < table.length; i++) {
              arr2.push(table[i][i]);
            }
            diagonalLine1 = arr2.reduce((a, b) => a + b);
    
            // 대각선 합 (역방향reverse)
            let diagonalLine2 = Number;
            let arr3 = [];
            for (let i = 0; i < table.length; i++) {
              arr3.push(table[i][table.length - i - 1]);
            }
            diagonalLine2 = arr3.reduce((a, b) => a + b);
    
            // 모든 합의 묶음과 비교
            allArr.push(
              ...horizontalLines,
              ...verticalLines,
              diagonalLine1,
              diagonalLine2
            );
            answer = Math.max(...allArr);
            return answer;
          }
    
          const line1 = [11, 12, 13, 14, 15];
          const line2 = [16, 17, 18, 19, 20];
          const line3 = [29, 28, 27, 26, 25];
          const line4 = [24, 23, 22, 21, 20];
          const line5 = [15, 18, 19, 14, 13];
          console.log(solution([line1, line2, line3, line4, line5]));

    와.. 내가 풀었다는게 놀랍다. (2시간정도 걸렸다는게.... 함정스...... 나의 끈기와 노력에 감동의눙물)
    중간에 코드 한줄은 구글의 도움을 받았지만.. 핳
    와..수학 산수를 잘해야 알고리즘도 풀겠다 ... 를 느꼈다 ㅋㅋ

    구글의 도움받은 코드:
    arr3.push(table[i][table.length - i - 1]);
    table.length - i - 1 이공식은 대각선의 역방향 인덱스를 구하는건데,
    내머리에서 절대 나올수 없지.... ㄱㅡ .. ㅋㅋ


    ▼나의풀이: '대각선 합' 부분을 2중포문으로 풀어보았다.

            // 대각선 합 (역방향reverse)
            let diagonalLine2 = Number;
            let arr3 = [];
            for (let i = 0; i < table.length; i++) {
              for (let j = 0; j < table.length; j++) {
                if (i + j === table.length - 1) {
                  arr3.push(table[i][j]);
                }
              }
            }
            diagonalLine2 = arr3.reduce((a, b) => a + b);

    반응형
Designed by Tistory.