여니의 취준 준비/코딩테스트 (Java)

[SWEA] 1959. 두 개의 숫자열 in JAVA

여니's 2022. 7. 8. 17:19

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


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);

        }
	}
}