[SW1959] 두 개의 숫자열
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/SW Expert Academy

[SW1959] 두 개의 숫자열

 

 SW Expert Academy- 두 개의 숫자열 

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 

문제 입력

10
3 5
1 5 3
3 6 -7 5 4
7 6
6 0 5 5 -1 1 6
-4 1 8 7 -9 3
5 15
-8 4 6 -9 -1
-1 1 0 -2 10 10 0 2 5 2 10 7 -9 7 -8
11 20
3 -8 4 0 -1 -4 8 3 7 -3 1
3 10 0 1 10 0 -8 -6 9 -7 -1 1 -1 4 10 6 0 -8 -5 0
11 16
-6 0 -1 7 5 -1 -3 0 -9 8 4
0 -6 1 1 8 -8 0 -7 4 -7 -8 -2 1 4 0 -10
3 16
8 9 0
-4 9 -7 -1 -8 3 1 -6 -8 5 2 -7 -9 -10 8 9
11 3
3 -4 -7 7 -2 5 5 0 -2 -8 4
-1 1 3
14 6
-9 9 0 -7 8 10 7 -3 2 3 0 0 0 -2
8 1 -9 3 0 -7
17 10
-6 -1 -4 2 -5 1 -10 -9 8 -9 -6 1 10 0 -5 -8 1
7 6 2 7 -8 4 8 10 -2 9
11 9
8 6 -2 0 0 5 10 2 -10 -8 -10
10 -9 -7 -1 0 8 0 10 3
#1 30
#2 63
#3 140
#4 181
#5 63
#6 58
#7 22
#8 120
#9 96
#10 70

 

문제 풀이

package sw.expert.academy;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

/*
 * [입력]
 * T
 * n m
 * arr1
 * arr2
 * return 일자로 곱해서 제일 큰 
 * 
 */

public class SW1959두개의숫자열 {
	static int add_arrays(String[] arr1, String[] arr2) {
		// max 값 초기화
		int max = -2147000000;

		// 첫번쨰 반복문: 큰 - 작 배열의 길이만큼 돈다.
		for (int i = 0; i <= arr2.length - arr1.length; i++) {
			int sum = 0;

			// 두번째 반복문: 작은 배열의 길이 만큼 돈다.
			for (int j = 0; j < arr1.length; j++) {
				sum += Integer.parseInt(arr2[i + j]) * Integer.parseInt(arr1[j]);
			}

			// max 값 갱
			if (sum > max) {
				max = sum;
			}
		}

		return max;
	}

	public static void main(String[] args) throws IOException {
		// 파일 입출력
		System.setIn(new FileInputStream("src/sw/expert/academy/input.txt"));
		Scanner sc = new Scanner(System.in);

		// T, n, m 입력 받기
		int T = sc.nextInt(); // 테스트 케이스

		for (int t = 0; t < T; t++) {
			int n, m; // 배열의 크기
			n = sc.nextInt();
			m = sc.nextInt();
			// System.out.println(T + "\n" + n + " " + m);

			// nextInt는 \n바로 전까지 숫자 입력 받음
			// 따라서, 개행문자가 제거되지 않았다.
			// 남아있는 개행문자를 없애주기 위해서 nextLine(); 사용
			sc.nextLine();

			// 배열 입력받기
			String[][] arr = new String[2][];
			for (int i = 0; i < 2; i++) {
				String s = sc.nextLine();
				arr[i] = s.split(" ");
				// System.out.println(Arrays.toString(arr[i]));
			}

			int max;
			if (n <= m) {
				max = add_arrays(arr[0], arr[1]);
			} else {
				max = add_arrays(arr[1], arr[0]);
			}

			System.out.printf("#%d %d\n", t + 1, max);
		}

		sc.close();
	}
}
  • 우선 Scanner 를 이용하여 입력을 받습니다.
  • 문제가 0 1 2 - 0 1 2, 0 1 2 - 1 2 3 쌍으로 움직입니다.
  • 따라서, 작은 배열은 큰 배열의 길이만큼 반복되어야 합니다.
  • 첫번째 배열은 큰 배열의 길이만큼 반복을 해줍니다.
  • 큰 배열에서 한 칸씩 이동하기 때문에 두번째 반복문은 작은 배열의 길이만큼 돌아야 합니다.
  • 근데, 여기서 큰 배열의 길이를 넘어가면 안되므로 (큰 - 작은) 배열 길이 만큼 뺀 값까지 돌아야 합니다.
  • 그런 다음 최댓값을 구해주면 됩니다.

+ 아 진짜 자바 다 까먹었다 어쩌냐

 

 

 

 

 

 

 

 

 

# SWEA 두 개의 숫자열 # swea 두개의숫자열 java


 

728x90