inflearn logo
강의

Course

Instructor

Data Structure Learning with Java

Variables, Arrays, and Loops 6

변수, 배열, 반복문에서 이중for문

858

wlgid52142485

2 asked

1

안녕하세요. 강의 잘 듣고 있습니다. 처음 코딩을 접하는거라 이해가 안되는 부분이 있습니다.
첫번째는 for문에서 int j = i 부분이 이해가 안갑니다. 선생님께서 끝점과 시작점이 같다는 말을 하셨는데 이중 for문이 어떻게 작동하는 것인지 이해가 안됩니다... 앞에 문제에서 j=i+1은 이해가 갔는데 그러면 이 값도 똑같이 j=i+1을 해줘야 하는 거 아닐까요..)합이니까..)
두 번째는 int sum=0 이부분입니다. 어떻게 작동되는 것인지 도저히 이해가 안되서 질문남깁니다.... 그냥 저 밑에 for문이 어떻게 구동되는지 이해가 안갑니다..
 
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);
	}
}
 

java

Answer 1

1

WaterGun

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

561

3

휼륭한 강의 감사합니다.

2

243

0

코드의 차이점이 뭔가요 ??

0

236

1

add와 remove 메소드를 사용할때, size-1에 대한 질문

0

222

1