해설좀부탁드립니다.! 왼쪽 그린거같이 저렇게까지는 해봣는데 그다음부터 이해가 잘안갑니다.
안녕하세요.
변형된 for문에 대한 이해가 먼저인 것 같습니다.
for(A:B)의 경우 B를 A에 치환(저장) 하면서 그 횟수만큼 반복하라는 의미입니다.
즉
for(int i[] : a)
치환되는 부분이 i[] 으로 배열로 선언되었으므로 이에 대응하는 a는 배열의 형태여야 합니다.
또한 a는 2차원 배열로 선언됐지만 a의 값이 치환(저장)되는 i[]는 1차원 배열로 선언되었으므로
a 배열의 값이 1차원 배열의 형태, 즉 한 행씩 치환됩니다.
결국 a 배열은 두 행으로 이루어져 있으므로 for(int i[] : a)는 다음과 같이 2번 반복합니다.
i[] 배열에 a 배열의 첫 행의 값을 저장하면서 for문을 1회 수행합니다.
for문 안쪽을 보니
for(int j : i) 가 있습니다. 같은 맥락으로
i의 값을 j에 치환(저장)하면서 그 횟수만큼 반복합니다.
앞서 i에는 a 배열의 첫 번째 행이 저장되었습니다.
즉 i에는 현재 a의 첫 번째 행의 값인 1 1 0 1 0이 저장되어 있으며
이 값이 j에 치환(저장)되는데, j는 배열이 아니라 일반 변수이므로 i의 값이 한 행이 아니라 한 열, 즉 한 개씩 저장되면서 for문이 반복됩니다.
i는 1 1 0 1 0으로 총 5개의 요소를 갖으므로 j에 5개의 요소가 차례로 저장되면서 5회 반복합니다.
그러므로 tot += j;에 의해 tot에 1 1 0 1 0이 차례로 누적되어 결과적으로 3을 갖게 됩니다.
또한 totsu = totsu + i.length에 의해 totsu에는 i 배열의 크기, 즉 i 배열의 요소수가 누적됩니다. 지금은 i 배열의 요소가 5이므로 5가 누적됩니다.
안쪽 for문이 완료되면
바깥쪽 for문을 수행하여
이번에는 a 배열의 두 번째 행이 i 배열에 저장되면서 for문이 반복됩니다.
안쪽 for문에서
이번에는
j에 i 배열의 값인 1 0 1 0, 즉 4개의 요소가 저장되면서 for문을 4회 반복합니다.
앞선 tot에 이번에는 1 0 1 0이 누적됩니다. 이전에 누적된 3에 지금의 누적된 값 2가 더해서 최종적으로 5가 됩니다.
totsu에는 i 배열의 크기, 즉 i 배열의 요소수가 누적됩니다. 앞선 누적된 값 5에 지금의 요소수인 4가 누적되어 9가 됩니다.
지금까지의 과정을 염두에 두면서 다시 한 번 직접 디버깅을 수행해 보면서 이해해 보세요.
오늘도 즐거운 하루 되세요.
-
*2018-07-17 09:51:32
안녕하세요.
변형된 for문에 대한 이해가 먼저인 것 같습니다.
for(A:B)의 경우 B를 A에 치환(저장) 하면서 그 횟수만큼 반복하라는 의미입니다.즉
for(int i[] : a)
치환되는 부분이 i[] 으로 배열로 선언되었으므로 이에 대응하는 a는 배열의 형태여야 합니다.
또한 a는 2차원 배열로 선언됐지만 a의 값이 치환(저장)되는 i[]는 1차원 배열로 선언되었으므로
a 배열의 값이 1차원 배열의 형태, 즉 한 행씩 치환됩니다.
결국 a 배열은 두 행으로 이루어져 있으므로 for(int i[] : a)는 다음과 같이 2번 반복합니다.
i[] 배열에 a 배열의 첫 행의 값을 저장하면서 for문을 1회 수행합니다.
for문 안쪽을 보니
for(int j : i) 가 있습니다. 같은 맥락으로
i의 값을 j에 치환(저장)하면서 그 횟수만큼 반복합니다.
앞서 i에는 a 배열의 첫 번째 행이 저장되었습니다.
즉 i에는 현재 a의 첫 번째 행의 값인 1 1 0 1 0이 저장되어 있으며
이 값이 j에 치환(저장)되는데, j는 배열이 아니라 일반 변수이므로 i의 값이 한 행이 아니라 한 열, 즉 한 개씩 저장되면서 for문이 반복됩니다.
i는 1 1 0 1 0으로 총 5개의 요소를 갖으므로 j에 5개의 요소가 차례로 저장되면서 5회 반복합니다.
그러므로 tot += j;에 의해 tot에 1 1 0 1 0이 차례로 누적되어 결과적으로 3을 갖게 됩니다.
또한 totsu = totsu + i.length에 의해 totsu에는 i 배열의 크기, 즉 i 배열의 요소수가 누적됩니다. 지금은 i 배열의 요소가 5이므로 5가 누적됩니다.
안쪽 for문이 완료되면
바깥쪽 for문을 수행하여
이번에는 a 배열의 두 번째 행이 i 배열에 저장되면서 for문이 반복됩니다.
안쪽 for문에서
이번에는
j에 i 배열의 값인 1 0 1 0, 즉 4개의 요소가 저장되면서 for문을 4회 반복합니다.
앞선 tot에 이번에는 1 0 1 0이 누적됩니다. 이전에 누적된 3에 지금의 누적된 값 2가 더해서 최종적으로 5가 됩니다.
totsu에는 i 배열의 크기, 즉 i 배열의 요소수가 누적됩니다. 앞선 누적된 값 5에 지금의 요소수인 4가 누적되어 9가 됩니다.
지금까지의 과정을 염두에 두면서 다시 한 번 직접 디버깅을 수행해 보면서 이해해 보세요.
오늘도 즐거운 하루 되세요.