> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java 2D Array

jini:) 2023. 9. 25. 12:33
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java 2D Array
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

6 * 6 2D 배열이 제공됩니다. 배열의 모래시계는 다음과 같은 모양의 부분입니다.

a b c
  d
e f g

예를 들어, 0으로 가득 찬 배열 내에서 숫자 1을 사용하여 모래시계를 생성하면 다음과 같이 보일 수 있습니다.

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

실제로 위의 배열에는 많은 모래시계가 있습니다. 가장 왼쪽에 있는 세 개의 모래시계는 다음과 같습니다.

1 1 1     1 1 0     1 0 0
  1         0         0
1 1 1     1 1 0     1 0 0

 

모래시계의 합은 그 안에 있는 모든 숫자의 합입니다. 위의 모래시계의 합은 각각 7, 4, 2입니다.

이 문제에서는 배열의 모든 모래시계 중에서 가장 큰 합계를 출력해야 합니다.

 

Input Format

각각 공백으로 구분된 6개의 정수를 포함하는 정확히 6개의 줄이 있을 것입니다. 각 정수는 -9와 9포함입니다.

 

Output Format

이 문제에 대한 답을 한 줄에 출력하세요.

 

 

Sample Input

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0

 

Sample Output

19

 

Explanation

총액이 가장 큰 모래시계는 다음과 같습니다.

2 4 4
  2
1 2 4

 

 

Code

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        List<List<Integer>> arr = new ArrayList<>();

        IntStream.range(0, 6).forEach(i -> {
            try {
                arr.add(
                    Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
                        .map(Integer::parseInt)
                        .collect(toList())
                );
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        });

        bufferedReader.close();
        
        int maxSum = findArrayMaxSum(arr);
        System.out.println(maxSum);
    }
    
    private static int findArrayMaxSum(List<List<Integer>> arr) {
        int maxSum = Integer.MIN_VALUE;

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                int currentSum = calArraySum(arr, i, j);
                maxSum = Math.max(maxSum, currentSum);
            }
        }

        return maxSum;
    }

    private static int calArraySum(List<List<Integer>> arr, int i, int j) {
        int sum = 0;
        sum += arr.get(i).get(j) + arr.get(i).get(j + 1) + arr.get(i).get(j + 2);
        sum += arr.get(i + 1).get(j + 1);
        sum += arr.get(i + 2).get(j) + arr.get(i + 2).get(j + 1) + arr.get(i + 2).get(j + 2);
        return sum;
    }
}

 

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형