| English | 의미 |
|---|---|
| nested iteration/ˈnestɪd ˌɪtəˈreɪʃn/ | 중첩 반복 |
루프 안의 루프
- 중첩 반복은 하나의 루프를 다른 루프의 본문 내부에 배치합니다.
- 안쪽 루프가 완전히 실행되어 외부 루프의 각 pass마다 실행됩니다.
- 외부가 **
m**회, 안쪽이 각 **n**회 → 안쪽 본문이 **m × n**회 실행됩니다. - 중첩은 격자, 표 및 모든 쌍 비교를 처리합니다.
행과 열
- 일반적인 사용법: 행을 위한 외부 루프, 열을 위한 안쪽 루프입니다.
for (int r = 0; r < rows; r++) { for (int c = 0; c < cols; c++) { ... } }- 각 행에 대해, 안쪽 루프는 외부가 진행되기 전에 모든 열을 스캔합니다.
- 이는 순서대로 2-D 격자의 모든 셀을 방문합니다.
순서 추적
- 안쪽 루프가 모든 pass를 마치면, 그다음 외부가 한 단계 진행합니다.
- 외부
r=0: 안쪽c=0,1,2; 외부r=1: 안쪽c=0,1,2; etc. - 각 외부 pass 시작 시 안쪽 카운터를 초기화하십시오.
- 천천히 추적하십시오 — 어떤 루프가 진행하는지 혼동하는 것은 흔한 실수입니다.
안쪽 변수 주의
- 안쪽 루프의 카운터는 내부에 선언하거나 각 외부 pass마다 초기화하십시오.
- 안쪽 조건에서 외부 변수를 재사용하면 간섭 여부를 확인하십시오.
- 의도하지 않는 한 안쪽과 외부 카운터는 독립이어야 합니다.
- 삼각형 패턴 (
cfrom0tor)은 안쪽 카운트가 외부에 의존하게 만듭니다.
중첩 루프에서 안쪽 루프는 외부 pass마다 완전하게 실행됩니다. 따라서 안쪽 본문이 **outer × inner**회 실행됩니다 — 10 × 10 중첩은 안쪽 본문이 **100**회 실행되고, **20**회가 아닙니다. 각 외부 pass에서 안쪽 카운터를 초기화하십시오(안쪽 for 헤더에서 선언하면 자동으로这样做), 그렇지 않으면 두 번째 외부 pass가 첫 번째가 중단된 지점에서 시작됩니다.
별 3×3 격자 출력하기:
for (int r = 0; r < 3; r++) { for (int c = 0; c < 3; c++) { print("*"); } println(); }- 외부가 **
3**회, 안쪽이 각 **3**회 → 총 **9**개의 별. - 각 외부 pass는 세 개의 행을 출력한 후 줄바꿈을 삽입합니다.
중첩 반복은 루프를 다른 루프 내부에 배치합니다; 안쪽 루프가 외부 pass마다 완전하게 실행되므로 안쪽 본문이 **outer × inner**회 실행됩니다. 격자를 위한 패턴입니다(외부 = 행, 안쪽 = 열). 각 외부 pass에서 안쪽 카운터를 초기화하고, 신중하게 추적하십시오 — 안쪽이 완료되기 전까지 외부가 진행되지 않습니다.
중첩된 루프가 그리드를 스캔함
외부 루프 = 행, 내부 루프 = 열; 내부 루프가 각 행을 채움.
외부 루프가 3번, 내부 루프가 매번 3번 실행됨. 내부 본체가 몇 번 실행되는가?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
3 × 3 = 9.
중첩된 루프에서, 외부 루프의 모든 단일 반복마다 내부 루프가 완전히 실행됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
그래서 내부 본체는 외부 × 내부 횟수만큼 실행됩니다.
2-D 그리드에 대해, 어떤 루프가 일반적으로 열을 처리하는가?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
외부 = 행, 내부 = 열.
10 × 10 중첩 루프는 내부 본체를 몇 번 실행하는가?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
10 × 10 = 100.
내부 카운터를 내부 for-헤더에 선언하면 외부 반복마다 초기화됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
내부 헤더의 새 int i는 매번 다시 시작합니다.