작성
·
728
1
import java.util.Scanner;
public class Code12 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int [] data = new int[n];
for(int i = 0; i<n; i++)
data[i] = kb.nextInt();
kb.close();
int max = 0;
for(int i = 0; i<n; i++) {
int sum = 0; //i가 바뀔 때(출발점이 변경될 때) 0으로 초기화됨
for(int j = i; j<n; j++) { //data[i]에서 data[j]까지의 합
sum += data[j];
if (sum > max)
max = sum;
}
}
System.out.println(max);
}
}
답변 1
1
n이 5라고 가정하고 예시를 들어보겠습니다
그럼 data[5]가 되니깐 길이가 5인 배열이 생성이 되겠죠?
이 배열에
for(int i=0; i<n; i++) {
data[i] = kb.nextInt();
}
를 하면서 5번 돌아 배열에 값을 집어 넣어주겠네요
data[0] = 1
data[1] = 2
data[2] = 3
data[3] = 4
data[4] = 5 로 설정하겠습니다
int max=0 ; 이라 선언 되어잇고
for(int i = 0; i<n; i++) {
int sum = 0; //i가 바뀔 때(출발점이 변경될 때) 0으로 초기화됨
for(int j = i; j<n; j++) { //data[i]에서 data[j]까지의 합
sum += data[j];
if (sum > max) {
max = sum;
}
}
}
인 이중 for Loop를 만났네요.
진행해보자면, i=0 인 상태에서 for문을 또 돌게 되는데
for(int j=i; j<n; j++) 에서 i가 0이니깐 j=0이게 됩니다.
결국 풀어보면 for(int j=0; j<5; j++) 이 되면서 sum 변수는 data[0]~data[4]를 += 하면서 1 2 3 4 5 를 더하게 되어 sum은 15가 되고
max도 for문을 돌면서 1,3, 6, 10 이었다가 최종적으로 15가 됩니다. 이렇게 내부에 있는 for문이 끝나게 됩니다.
그렇지만 밖에 있는 for문이 아직 안끝났네요. i++이 되면서 i=1이 됩니다
sum은 다시 0으로 초기화가 되고
또 다시 내부에 있는 for문을 만나는데 i=1이니깐 이번엔 for문이
for(int j=1; j<5; j++) 이렇게 되겠네요.
sum += data[j] 인데, 이번엔 1부터 시작합니다. data[1]~[4]를 더해봅시다. 2 3 4 5가 더해져 sum은 14가 됩니다. 하지만 max는 15라
if(sum > max) { max = sum; } 의 조건에 부합하지 않아 그냥 빠져나옵니다.
이렇게 안에 있는 for문이 또 끝났습니다
다시 밖에 있는 for문이 안끝났죠? i++ 로 i=2가 되고 위의 과정을 i=5가 될때까지 반복하게 됩니다.
(i가 5가 되면 밖에 있는 for문을 빠져나오게 되면서 마지막에 System.out.println(max)로 max를 출력하고 끝납니다. (max=15) )
import java.util.Scanner;
public class DoubleForLoop4 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int [] data = new int[n];
for(int i = 0; i<n; i++)
data[i] = kb.nextInt();
kb.close();
int max = 0;
for(int i = 0; i<n; i++) {
int sum = 0; //i가 바뀔 때(출발점이 변경될 때) 0으로 초기화됨
System.out.println("<i : " + i + ">");
for(int j = i; j<n; j++) { //data[i]에서 data[j]까지의 합
sum += data[j];
if (sum > max) {
max = sum;
}
System.out.println("j :" + j + ", for Loop sum : " + sum + ", max : " + max);
}
}
System.out.println(max);
}
}
이걸로 이클립스에서 돌려보세요