본문 바로가기

SWEA/D2

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

[문제]

 

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

 

SW Expert Academy

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

www.swexpertacademy.com

 

[풀이 방법]

 

N이 M보다 작은 경우 / 같을 경우 / 큰 경우를 나누어 최대값을 구했습니다. 

A배열의 첫번째 인덱스를 기준으로 B 배열의 양 끝까지 움직이면서 최대값을 구하면 되므로, 

총 M-N번 반복하여 A[1] 인덱스가 최대한 많은 B인덱스에 대입될 수 있도록 합니다.  (M==5 이고 N==3 일 경우 A[1] 은 B[1],[2],[3] 에 대입될 수 있다.)

 

N만큼은 항상 계산이 되어야 하므로 배열 안의 숫자를 각각 곱하여 더한 값은 N만큼 반복합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
public class Solution {
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        int T = Integer.parseInt(st.nextToken());
 
        StringBuffer sf = new StringBuffer();
 
        for (int k = 0; k < T; k++) {
 
            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 i = 0; i < M; i++) {
                B[i] = Integer.parseInt(st.nextToken());
            }
 
            int max = 0;
 
            if (N < M) {
                for (int j = 0; j <= M-N; j++) {
                    int result = 0;
                    for (int i = 0; i< N; i++) {
                        result += A[i] * B[i + j];
                    }
                    max = Math.max(result, max);
                }
            }
            else if (N > M) {
                
                for (int j = 0; j < N-M; j++) {
                    int result = 0;
                    for (int i = 0; i< M; i++) {
                        result += A[i+j] * B[i];
                    }
                    max = Math.max(result, max);
                }
            }
            else {
                int result = 0;
 
                for (int i = 0; i< M; i++) {
                    result += A[i] * B[i];
                }
                
                max = Math.max(result, max);
 
            }
            
            sf.append("#" + (k+1+ " " + max + "\n");
        }
        System.out.println(sf.toString());
        
    }
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter