SW Expert Academy 1959. 두 개의 숫자열 (Java, Kotlin)

: ) YOUNG·2022년 6월 30일
1

알고리즘

목록 보기
155/422

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가지 조건을 따로 구성하여 반복문을 만들어야 한다.



코드



Java

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

0개의 댓글