https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq
A나 B를 자유롭게 움직여서
서로 마주보는 숫자들을 곱한 뒤 모두 더할때의 최댓값을 구하는 문제
A의 길이 = N
B의 길이 = M
M이 큰 경우, N이 큰 경우, N과 M이 같은 경우
총 3가지의 경우를 고려해줘야 한다.
1) M이 큰 경우 (N<M)
: A의 배열 길이 < B의 배열 길이
즉, A를 움직이면서 B의 배열요소와 곱해준다.
2) N이 큰 경우 (N>M)
: A의 배열 길이 > B의 배열 길이
즉, B를 움직이면서 A의 배열 요소와 곱해준다.
1번과 반대로 진행하면 됌.
3) N == M인 경우
: for문은 1번만 돌려주면 된다.
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt(); // 테스트 케이스
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt();
int M=sc.nextInt();
int[] A=new int[N];
int[] B=new int[M];
for(int i=0; i<A.length; i++) A[i]=sc.nextInt(); // A 배열에 입력값 받기
for(int i=0; i<B.length; i++) B[i]=sc.nextInt();
int answer=0; // 최댓값
if (N<M){
for(int i=0; i<M-N+1; i++){
int temp=0;
for(int j=0; j<N; j++){
temp+=A[j]*B[i+j];
}
answer=Math.max(answer,temp);
}
}
else if (N>M){
for(int i=0; i<N-M; i++){
int temp=0;
for(int j=0; j<M; j++){
temp+=A[i+j]*B[j];
}
answer=Math.max(answer,temp);
}
}
else{
int temp=0;
for(int i=0; i<N; i++){
temp+=A[i]*B[i];
}
answer=Math.max(answer,temp);
}
System.out.printf("#%d %d\n",test_case,answer);
}
}
}
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[20546] 기적의 매매법 in Java (0) | 2022.07.29 |
---|---|
[SWEA] 1961. 숫자 배열 회전 in Java (0) | 2022.07.11 |
[SWEA] 2001. 파리 퇴치 in python (0) | 2022.07.11 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 in Java (0) | 2022.07.11 |
[Coding Test] 자바 문법, 속성 총 정리 (0) | 2022.07.06 |