반응형
1) 문제 : www.hackerrank.com/challenges/2d-array
2). 풀이 :
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the hourglassSum function below.
static int hourglassSum(int[][] arr) {
int rowLength = arr.length;
int sum = -2147483648;
for(int i=0; i<rowLength-2; i++){
int colLength = arr[i].length;
for(int j=0; j<colLength-2; j++){
int result = 0;
result+= arr[i][j]+arr[i][j+1]+arr[i][j+2];
result+= arr[i+1][j+1];
result+= arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2];
if(sum<result){
sum = result;
}
}
}
return sum;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int[][] arr = new int[6][6];
for (int i = 0; i < 6; i++) {
String[] arrRowItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int j = 0; j < 6; j++) {
int arrItem = Integer.parseInt(arrRowItems[j]);
arr[i][j] = arrItem;
}
}
int result = hourglassSum(arr);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}
이문제는 2차원 배열을 부여받고, 그 2차원 배열을 나열한뒤 모래시계모양을 그려, 해당 모래시계모양에 속한 값들을 더한 값중 가장 큰 값을 출력하는 문제이다.
영어로 되어있어서 조금...ㅠ
일단 코드를 치기전 어떤식으로 규칙이 나오나 확인해봤다.
각 값들의 index를 좌표로 만들어 사용하였다.
첫번째 모래시계
[0,0],[0,1][0,2]
[1,1]
[2,0],[2,1],[2,2]
다음 모래시계
[0,1],[0,2][0,3]
[1,2]
[2,1],[2,2],[2,3]
...
이렇게 보면 쉽게 풀수있다.
반응형
'Java > Algorithm' 카테고리의 다른 글
[Java-Algorithm] HackerRank Java New Year Chaos 풀이 (0) | 2021.01.26 |
---|---|
[Java-Algorithm] HackerRank Java Arrays: Left Rotation 풀이 (0) | 2021.01.26 |
[Java-Algorithm] HackerRank Java Date and Time 풀이 (0) | 2021.01.25 |
[Java-Algorithm]HackerRank Java Static Initializer Block 풀이 (0) | 2021.01.25 |
[Java-Algorithm]HackerRank Java End-of-file (0) | 2021.01.22 |