1959 두 개의 숫자열

Sungmin·2023년 10월 25일
0

SWEA 알고리즘

목록 보기
5/26

두 개의 숫자열 URL

내 풀이

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

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

        for (int i = 1; i <= T; i++) {
            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];

            StringTokenizer st2 = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                A[j] = Integer.parseInt(st2.nextToken());
            }
            // System.out.println("A: " + Arrays.toString(A));


            StringTokenizer st3 = new StringTokenizer(br.readLine());
            for (int j = 0; j < M; j++) {
                B[j] = Integer.parseInt(st3.nextToken());
            }
            // System.out.println("B: " + Arrays.toString(B));

            int answer = 0;
            if (N < M) {
                for (int j = 0; j <= Math.abs(N-M); j++) {
                    int idx = 0;
                    int max = 0;
                    for (int k = 0; k < N; k++) {
                        max += A[k] * B[j+idx];
                        idx++;
                    }
                    answer = Math.max(answer, max);
                }
            } else if (N > M) {
                for (int j = 0; j <= Math.abs(N-M); j++) {
                    int idx = 0;
                    int max = 0;
                    for (int k = 0; k < M; k++) {
                        max += A[j+idx] * B[k];
                        idx++;
                    }
                    answer = Math.max(answer, max);
                }
            } else {
                for (int j = 0; j < N; j++) {
                    answer += A[j] * B[j];
                }
            }
            System.out.println("#" + i + " " + answer);
        }
    }
}

배운점

너무 지저분하게 풀려서 더 나은방법이 있을것이라는 생각에 다른 방법을 고민하는데 많은 시간을 보냈다.
그러나 결국, 이중for문과 N과 M이 일치할 경우를 고려해주는 방법밖에 생각나지 않았고

  1. N이 클 경우
  2. M이 클 경우
  3. N과M이 같을 경우

3가지를 고려해서 풀이에 성공하였다.

profile
Let's Coding

0개의 댓글