122쪽의 문제 18 해설 518쪽을 보면...
중간에 (int i[]:a) 뜻이 a배열의 한개의 행이 할당될 변수를 1차원 배열로 선언한다고
되어있는데 항상이런문제가 나오면 배열을 한 행 한 행 나눠서 생각해야 하는건가요?
문제에서
j값, tot값 구하는것은 이해가 가는데
i.length 나오면서 배열 요소수로 계산해서 구하는 totsu값이 이해가 가지 않아요.
i.length를 했을 때 왜 5, 4 나눠서 생각해야 하는건가요ㅠㅠㅠㅠㅠ
문제좀 다시 설명 부탁드립니다.
안녕하세요 길벗수험서 운영팀입니다.
[1] int i[]:a
배열이 어떻게 선언되었냐에 따라 달라집니다.
배열 a는 2차원 배열로 선언되어 있고 i는 1차원 배열로 선언되어 있습니다.
이 경우 1차원 배열 i는 2차원 배열 a를 분할하여 한 행씩 받게 되죠.
만약 3차원 배열 c가 존재한다면 어떻게 될까요.
for(int i[][]:c)
for(int j[]:i)
for(int k:j)
이런 식으로 작성되야겠죠.
반대로 차원이 줄어들어 1차원 배열 c라면 단순히
for(int i:c)
만 적으면 될 것입니다.
[2] i.length
먼저 totsu=totsu+i.length; 가 for(intj:i)가 아닌 for(int i[]:a)에 속한다는 것을 알아두세요.
for(int j:i)에 중괄호{}가 존재하지 않기 때문에 해당 for문은 tot+=j만 반복 수행한 후 종료됩니다.
for(int i[]:a)의 경우 2회 반복하게 됩니다.
첫 번째는 2차원 배열 a의 첫행 {1, 1, 0, 1, 0}을 받아 배열 i는
int i[5] = { 1, 1, 0, 1, 0 }; 을 수행한 것과 동일하게 되죠.
때문에 첫 회전 시 i.length의 값은 5가 됩니다.
두 번째에서는 배열 a의 두번째 행 {1, 0, 1, 0}을 받아 배열 i는
int i[4] = { 1, 0, 1, 0 }; 을 수행한 것과 같게 됩니다.
이로 인해 두번째 회전 시 i.length의 값은 4가 됩니다.
이 두 값이 totsu에 누적되어 9가 되는 것이죠.
제대로 설명이 되었는지 모르겠네요. 만약 이해가 되지 않는 부분이 있으시다면, 해당 부분을 구체적으로 질문주시면 더 자세하게 답변드리겠습니다.
행복한 하루되세요 :)
-
관리자2019-08-16 11:19:48
안녕하세요 길벗수험서 운영팀입니다.
[1] int i[]:a
배열이 어떻게 선언되었냐에 따라 달라집니다.
배열 a는 2차원 배열로 선언되어 있고 i는 1차원 배열로 선언되어 있습니다.
이 경우 1차원 배열 i는 2차원 배열 a를 분할하여 한 행씩 받게 되죠.
만약 3차원 배열 c가 존재한다면 어떻게 될까요.
for(int i[][]:c)
for(int j[]:i)
for(int k:j)
이런 식으로 작성되야겠죠.
반대로 차원이 줄어들어 1차원 배열 c라면 단순히
for(int i:c)
만 적으면 될 것입니다.
[2] i.length
먼저 totsu=totsu+i.length; 가 for(intj:i)가 아닌 for(int i[]:a)에 속한다는 것을 알아두세요.
for(int j:i)에 중괄호{}가 존재하지 않기 때문에 해당 for문은 tot+=j만 반복 수행한 후 종료됩니다.
for(int i[]:a)의 경우 2회 반복하게 됩니다.
첫 번째는 2차원 배열 a의 첫행 {1, 1, 0, 1, 0}을 받아 배열 i는
int i[5] = { 1, 1, 0, 1, 0 }; 을 수행한 것과 동일하게 되죠.
때문에 첫 회전 시 i.length의 값은 5가 됩니다.
두 번째에서는 배열 a의 두번째 행 {1, 0, 1, 0}을 받아 배열 i는
int i[4] = { 1, 0, 1, 0 }; 을 수행한 것과 같게 됩니다.
이로 인해 두번째 회전 시 i.length의 값은 4가 됩니다.
이 두 값이 totsu에 누적되어 9가 되는 것이죠.
제대로 설명이 되었는지 모르겠네요. 만약 이해가 되지 않는 부분이 있으시다면, 해당 부분을 구체적으로 질문주시면 더 자세하게 답변드리겠습니다.
행복한 하루되세요 :)