변수, 배열, 반복문에서 이중for문
858
投稿した質問数 2
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);
}
}
이걸로 이클립스에서 돌려보세요
연습문제 자료들 어디서 볼 수 있을까요
3
967
0
강의자료 어디서 보나요
0
818
0
섹션1,섹션2의 연습문제에 대한 코드 공유
0
325
0
교수님이 말씀하신 반복문 수업 끝날 때 말씀해주신 연습문제 답 코드 어딨는지 아시는 분계시나요 도와주세요
0
288
0
소수의 개념을 알겠지만 원리를 모릅니다.. 그냥 외워야 할까요?
0
788
1
강의노트를 못 찾겠습니다 ㅠㅠ
0
646
1
오버라이딩
0
407
1
강의자료는 어디서 볼수있나요??
0
496
1
2-1장 (클래스, 객체, 참조변수 3) 마지막 값이 덮어씌워지는 문제
0
216
0
추상클래스와인터페이스 관련강의
0
220
0
왜 main 함수 안에서 함수를 정의하면 오류가 나는 건가요?
0
4250
1
for구문에서 {}
1
278
2
강의자료 소스코드는 따로 없는건가요?
0
307
1
자바 IDE 선택에 대한 질문입니다.
0
374
1
inner class에 대한 질문
0
247
0
remove(index) 구현 질문
0
337
1
훌륭한 코드를 볼때 마다 감탄스럽습니다.
0
335
0
교수님이 자랑 스럽습니다.
0
209
0
상속 3에 예제 2의 영상이 올라와있어요~
0
216
0
3,4 순서가 바뀌어서 업로드 되어 있습니다
0
185
0
강의 노트는 어디서 확인할 수 있나요?
0
560
3
휼륭한 강의 감사합니다.
2
243
0
코드의 차이점이 뭔가요 ??
0
236
1
add와 remove 메소드를 사용할때, size-1에 대한 질문
0
222
1

