Coding Test/HackerRank

HackerRank 문제풀이 - 5 (2D Array - DS)

범데이 2022. 12. 5. 20:02

1. 문제

  • 임의의 2차원 배열(6x6)이 주어진다.
    • 위의 문제에서 주어진 패턴에 해당하는 인덱스의 값들을 모두 더한다.
    • 각 패턴별 더한 값들중 가장 높은 값을 결과로 도출한다.

 

 


2. 1차 풀이

2.1 풀이 과정

function hourglassSum(arr) {
    // Write your code here
    let hourGlassSumArr = [];

    const maximumMoveXYPos = 4;
    for (let yPos = 0; yPos < maximumMoveXYPos; yPos++) {

        for (let xPos = 0; xPos < maximumMoveXYPos; xPos++) {
            let sum = arr[xPos][yPos] + arr[xPos + 1][yPos] + arr[xPos + 2][yPos]
                + arr[xPos + 1][yPos + 1] + arr[xPos + 2][yPos] + arr[xPos + 2][yPos + 1]
                + arr[xPos + 2][yPos + 2];

            hourGlassSumArr.push(sum);
        }

    }
    console.log(hourGlassSumArr);

    return Math.max(...hourGlassSumArr);
}

풀이방법은 다음과 같다.

  • 6x6의 2차원 배열을 주어진 패턴들로 탐색한다
  • 패턴이 3x3의 크기이기에, 오른쪽으로든 아래로든 4칸만 움직인다.
  • x, y축을 중첩된 반복문을 통해서 모든 패턴의 총계값을 구한다.
  • 구한 총계갚 중 가장 큰 숫자를 도출한다.

 

2.2 풀이 결과

이런.. 2차원 그래프의 x, y축 순서와 혼동하여

2차원 배열의 첫번째 인덱스와 두번째 인덱스의 값을 거꾸로 넣어주고 있었다.

 

각 패턴별 총계 값은 당연히 다르게 나왔다.

 

 

 

 

3. 2차 풀이

3.1 풀이 과정

이제 순서가 잘못 삽입된 두 인덱스를 서로 바꿔주면 된다.

 

2차원 배열의 첫번째 인덱스는 몇번째 행인지, 두번째 인덱스는 몇번째 열인지를 선택하여

배열에서 패턴에 해당하는 각 위치의 값을 가져오도록 바꾸어 주었다.

 

function hourglassSum(arr) {
    // Write your code here
    let hourGlassSumArr = [];

    const maximumMoveXYPos = 4;
    for (let yPos = 0; yPos < maximumMoveXYPos; yPos++) {

        for (let xPos = 0; xPos < maximumMoveXYPos; xPos++) {
            let sum = arr[yPos][xPos] + arr[yPos][xPos + 1] + arr[yPos][xPos + 2]
                + arr[yPos + 1][xPos + 1] + arr[yPos+2][xPos] + arr[yPos +2][xPos + 1]
                + arr[yPos + 2][xPos + 2];

            hourGlassSumArr.push(sum);
        }

    }
    console.log(hourGlassSumArr);

    return Math.max(...hourGlassSumArr);
}

 

3.2 풀이 결과

이러하여 모든 테스트케이스를 통과하였다.

HackerRank에서 제공하는 배열의 첫번째 문제인 만큼 몸풀기 난이도 정도로 무난하게 정답을 통과할 수 있었다.

반응형