본문 바로가기
알고리즘 풀이/SWEA

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

by cornsilk-tea 2022. 1. 16.
package level_2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class SW_1959 {

    public static void main(String[] args) throws NumberFormatException, IOException {
	// TODO Auto-generated method stub
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	StringTokenizer st;
	int T = Integer.parseInt(br.readLine());

	for (int test_case = 1; test_case <= T; test_case++) {
	    int[][] arr = new int[2][];
	    st = new StringTokenizer(br.readLine());
	    int N = Integer.parseInt(st.nextToken());
	    int M = Integer.parseInt(st.nextToken());

	    for (int cnt = 0; cnt < 2; cnt++) {// Aj와 Bj를 받기위함
		st = new StringTokenizer(br.readLine());
		int Token_cnt = st.countTokens();
		arr[cnt] = new int[Token_cnt];// 주의
		for (int n = 0; n < Token_cnt; n++) {
		    arr[cnt][n] = Integer.parseInt(st.nextToken());
//		    bw.write(arr[cnt][n] + " "); //왜 이때 출력하면 이 순간에 출력되는게아니라 한번에 출력될까?
		    // 버퍼에 저장했다가 한번에 출력하기 떄문.
		}
	    }
	    int result = 0;
	    int sum = 0;
	    if (arr[0].length < arr[1].length) { // 두번째것이 더 크면
		for (int a = 0; a < 1 + arr[1].length - arr[0].length; a++) {// N크기의 배열을 움직임
		    sum = 0;
		    int cnt = 0; // 작은 배열의 위치를 알려주기 위함
		    for (int b = 0; b < arr[0].length; b++) {// 배열끼리 탐색
			sum += arr[0][cnt] * arr[1][a + b];
//			System.out.println(
//				"arr[0][" + cnt + "]=" + arr[0][cnt] + " arr[1][" + (a + b) + "]=" + arr[1][a + b]);
			cnt += 1;
		    }
//		    System.out.println("sum = " + sum);
		    if (sum > result) {
			result = sum;
		    }
		}
	    } else { // 첫번째것이 더 클때
		for (int a = 0; a < 1 + arr[0].length - arr[1].length; a++) {// M크기의 배열을 움직임
		    sum = 0;
		    int cnt = 0; // 작은 배열의 위치를 알려주기 위함
		    for (int b = 0; b < arr[1].length; b++) {
			sum += arr[1][cnt] * arr[0][a + b];
//			System.out.println(
//				"arr[1][" + cnt + "]=" + arr[1][cnt] + " arr[0][" + (a + b) + "]=" + arr[0][a + b]);
			cnt += 1;
		    }
//		    System.out.println("sum = " + sum);
		    if (sum > result) {
			result = sum;
		    }
		}

	    }
//	    System.out.println("#" + test_case + " " + result);
	    bw.write("#" + test_case + " " + result + "\n");
	}
	bw.flush();
	bw.close();
    }

}