풀이
- N < M 인 경우 / N == M 인 경우 / N > M 인경우로 나눠서 풀었다.
- 자세한 설명은 코드에 추가했다.
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 |