728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java 2D Array
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
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Java Arraylist (0) | 2023.09.27 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java Subarray (0) | 2023.09.26 |
[해커랭크(HackerRank) JAVA 풀이] - Java 1D Array (0) | 2023.09.23 |
[해커랭크(HackerRank) JAVA 풀이] - Java BigInteger (0) | 2023.09.22 |
[해커랭크(HackerRank) JAVA 풀이] - Java Primality Test (0) | 2023.09.21 |