티스토리 뷰

반응형

■ 문제

원본 사이트: https://www.hackerrank.com/challenges/2d-array/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays 

 

2D Array - DS | HackerRank

How to access and use 2d-arrays.

www.hackerrank.com

 

난이도: Easy

최대 스코어: 15

 

● 문제 요약

  • 6 X 6 배열이 주어짐
  • hourglass(모래시계)는 I 모양으로 이루어진 패턴에 해당하는 인덱스들의 하위집합을 의미
  • hourglass sum은 hourglass(모래시계) 값들의 합계
  • 모든 hourglass(모래시계)에 대한 hourglass sum을 계산한 다음, 최대 hourglass sum를 return

 

예시:

arr = [
    -9 -9 -9  1  1  1 
     0 -9  0  4  3  2
    -9 -9 -9  1  2  3
     0  0  8  6  6  0
     0  0  0 -2  0  0
     0  0  1  2  4  0
]
  • 16개의 hourglass(모래시계)에 대한 각각의 hourglass sum
-63, -34, -9, 12, 
-10,   0, 28, 23, 
-27, -11, -2, 10, 
  9,  17, 25, 18

==> 최대 hourglass sum인 28을 return

 

 

■ 문제 풀이

hourglass(모래시계)은 I 모양의 패턴을 가졌기 때문에 hourglass sum은 arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]가 된다.

그래서 for문을 돌며 각각의 hourglass sum을 구한 다음, 최대 값을 return하면 된다.

 

● 완성 코드 - 15 Points (Max)

'use strict';

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', inputStdin => {
    inputString += inputStdin;
});

process.stdin.on('end', _ => {
    inputString = inputString.replace(/\s*$/, '')
        .split('\n')
        .map(str => str.replace(/\s*$/, ''));

    main();
});

function readLine() {
    return inputString[currentLine++];
}

// Complete the hourglassSum function below.
function hourglassSum(arr) {
    let hourglass = 0;
    let maximum = Number.MIN_SAFE_INTEGER;
    for(let i=0; i<4; i++){
        for(let j=0; j<4; j++){
            hourglass = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2];
            if(hourglass > maximum){
                maximum = hourglass;
            }
        }
    }
    return maximum;
}

function main() {
    const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

    let arr = Array(6);

    for (let i = 0; i < 6; i++) {
        arr[i] = readLine().split(' ').map(arrTemp => parseInt(arrTemp, 10));
    }

    let result = hourglassSum(arr);

    ws.write(result + "\n");

    ws.end();
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함