https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq&categoryId=AV5PpoFaAS4DFAUq&categoryType=CODE

 

SW Expert Academy

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

www.swexpertacademy.com

풀이

  1. N < M 인 경우 / N == M 인 경우 / N > M 인경우로 나눠서 풀었다.
  2. 자세한 설명은 코드에 추가했다.

 

import java.io.*;
import java.util.*;

public class Solution {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		

		for(int tc=1;tc<=T;tc++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
			int M = Integer.parseInt(st.nextToken());
			
			int[] a = new int[N];
			int[] b = new int[M];
			
			st = new StringTokenizer(br.readLine());
			for(int i=0; i<N; i++) {
				a[i] = Integer.parseInt(st.nextToken());
			}
			
			st = new StringTokenizer(br.readLine());
			for(int j=0; j<M; j++) {
				b[j] = Integer.parseInt(st.nextToken());
			}
			
			int max = 0;
			int tmp = 0;
			if(N < M) {
				
				for(int j=0; j<=M-N; j++) { //인덱스가 M-N을 넘어가면 비교할 범위(N개)가 넘어가므로
					int k=j; //비교할 위치
					int sum = 0;
					for(int i=0; i<N; i++) { //N개만큼동안 a배열과 b배열의 값을 곱해준다.
						tmp = a[i] * b[k++]; //a배열값과 b배열값 곱해주기
						sum += tmp; //곱한 값을 계속 더해준다.
					}
					if(sum > max) max = sum; //최댓값을 저장
				}

			} else if(N == M) { //크기가 같은 경우에 최댓값의 경우는 한가지.
				for(int i=0; i<N; i++) {
					max += a[i]*b[i];
				}
			} else { // N이 더 큰 경우. M이 더 큰 경우와 반대로 해주면 된다.
				for(int j=0; j<=N-M; j++) {
					int k=j;
					int sum = 0;
					for(int i=0; i<M; i++) {
						tmp = a[k++] * b[i];
						sum += tmp;
					}
					if(sum > max) max = sum;
				}
			}
			
			System.out.println("#"+tc+" "+max);
		}
	}

}

'SWEA > D2' 카테고리의 다른 글

[SWEA] 1948. 날짜 계산기  (0) 2019.05.14
[SWEA] 1954. 달팽이 숫자  (0) 2019.05.14
[SWEA] 1961. 숫자 배열 회전  (0) 2019.05.14
[SWEA] 1974. 스도쿠 검증  (0) 2019.05.03
[SWEA] 1970. 쉬운 거스름돈  (0) 2019.05.03

+ Recent posts