SW Expert Academy- 두 개의 숫자열
문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq
문제 입력
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
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > SW Expert Academy' 카테고리의 다른 글
[SW2001] 파리퇴치 (0) | 2022.07.12 |
---|---|
[SW1979] 어디에 단어가 들어갈 수 있을까 (0) | 2022.07.08 |
[SW10505] 소득 불균형 (0) | 2022.05.29 |
[SW10580] 전봇대 (0) | 2022.05.29 |
[SW10570] 제곱 팰린드롬 수 (0) | 2022.05.29 |