[개발] - Java/Mega

숫자야구 배열에서 두 번째 안쪽 for문에서 조건식에 대한 질문 chat GPT

완벽한 장면 2023. 3. 27. 13:37

Q.

for(int i = 0;i<com.length;i++) {
	com[i] = r.nextInt(9)+1;   // 예를 들면 com[0] = 8 com[1] = 7 com[2] = 7
		for(int j = 0;j<i;j++) {
			if(com[i] == com[j]) {
				i--; 
				break;
			}
		}
}

여기서 for(int j = 0;j<i;j++)

 

이 for문에서 왜 조건식이 j<i 가 되는 거야?

 

A.

이 코드에서 for문의 조건식 j<i은 현재 생성된 숫자들 중에서 중복되는 숫자가 있는지 확인하기 위한 것입니다.

외부의 for문에서 변수 i는 현재까지 생성된 숫자들의 개수를 나타냅니다.

따라서 내부의 for문에서는 이전에 생성된 숫자들과 비교하여 중복되는 숫자가 있는지 검사합니다.

 

내부 for문에서 j<i 조건식은

현재까지 생성된 숫자들 중에서

현재 검사하는 숫자보다 앞에 있는 숫자들만 검사하면 되기 때문입니다.

 

예를 들어, i가 3인 경우 (com[0], com[1], com[2]가 이미 생성된 상태)

내부 for문에서 j<i는 j=0, j=1에 대해서만 검사하면 됩니다.

 

j=2에 대해서는 이미 com[2]와 com[2]를 비교한 결과가 이전에 검사되었기 때문에 다시 검사할 필요가 없습니다.

 

------

 

Q. 그럼 for(int j = 0;j<i;j++) { } 이 j가 돌아가는 두 번째 반복문의 의미는 뭐야?

 

A.

두 번째 반복문인 for(int j = 0;j<i;j++)은 이전에 생성된 숫자들과 중복되는 숫자가 있는지 검사하기 위한 반복문입니다.

 

반복문의 조건식 j<i은 현재까지 생성된 숫자들 중에서

현재 검사하는 숫자보다 앞에 있는 숫자들만 검사하면 된다는 것을 나타냅니다.

 

따라서 내부 for문에서는 j가 0부터 i-1까지 반복하면서,

현재 생성된 숫자와 이전에 생성된 숫자들을 비교하여 중복되는 숫자가 있는지 검사합니다.

 

검사 과정에서,

만약 현재 생성된 숫자와 이전에 생성된 숫자들 중에서 중복되는 숫자가 있다면,

i를 감소시켜서 중복되지 않는 숫자를 다시 생성하도록 합니다.

 

이렇게 중복되는 숫자를 검사하여 중복을 피하는 과정을 반복하면서, 모든 숫자가 중복되지 않도록 생성됩니다.

728x90
반응형