• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

21.12.25 02:19 작성 조회수 554

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);
	}
}
 

답변 1

답변을 작성해보세요.

1

WaterGun님의 프로필

WaterGun

2022.01.18

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);
	}
}

이걸로 이클립스에서 돌려보세요