SW Expert Academy 1959. 두 개의 숫자열
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
Ai 나 Bj 를 자유롭게 움직여서 숫자들이 서로 마주보는 위치를 변경할 수 있다.
단, 더 긴 쪽의 양끝을 벗어나서는 안 된다.
서로 마주보는 숫자들을 곱한 뒤 모두 더할 때 최댓값을 구하라.
if(N<M) { // M이 클때, arr2 배열의 길이가 길 때,
for(int i=0; i<M-N+1; i++) {
int sum = 0;
for(int j=0; j<N; j++) {
sum += arr[j] * arr2[i+j];
}
result = Math.max(sum, result);
}
}
else if(N>M) {
for(int i=0; i<N-M+1; i++) {
int sum = 0;
for(int j=0; j<M; j++) {
sum += arr[i+j] * arr2[j];
}
result = Math.max(sum, result);
}
}
else{
for(int i=0; i<N; i++) {
result += arr[i] * arr2[i];
}
}
3가지 조건을 따로 구성하여 반복문을 만들어야 한다.
import java.util.*;
import java.io.*;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int t=1; t<=T; t++) {
sb.append("#").append(t).append(' ');
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int arr[] = new int[N];
int arr2[] = new int[M];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) arr[i] = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++) arr2[j] = Integer.parseInt(st.nextToken());
int result = Integer.MIN_VALUE;
if(N<M) { // M이 클때, arr2 배열의 길이가 길 때,
for(int i=0; i<M-N+1; i++) {
int sum = 0;
for(int j=0; j<N; j++) {
sum += arr[j] * arr2[i+j];
}
result = Math.max(sum, result);
}
}
else if(N>M) {
for(int i=0; i<N-M+1; i++) {
int sum = 0;
for(int j=0; j<M; j++) {
sum += arr[i+j] * arr2[j];
}
result = Math.max(sum, result);
}
}
else{
for(int i=0; i<N; i++) {
result += arr[i] * arr2[i];
}
}
sb.append(result).append('\n');
}
bw.write(sb.toString()); bw.flush(); bw.close();
} // End of main
} // End of Main class