책 내용 질문하기
2장 예상문제은행 문제38 질문합니다.
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
504
조회수
168
작성일
2019-08-14
작성자
탈퇴*원
첨부파일

 

122쪽의 문제 18 해설 518쪽을 보면...

중간에 (int i[]:a) 뜻이 a배열의 한개의 행이 할당될 변수를 1차원 배열로 선언한다고 

되어있는데 항상이런문제가 나오면 배열을 한 행 한 행 나눠서 생각해야 하는건가요?

 

문제에서 

j값, tot값 구하는것은 이해가 가는데 

 

i.length 나오면서 배열 요소수로 계산해서 구하는 totsu값이 이해가 가지 않아요.

i.length를 했을 때 왜 5, 4 나눠서 생각해야 하는건가요ㅠㅠㅠㅠㅠ

문제좀 다시 설명 부탁드립니다. 

답변
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가 되는 것이죠.

 

제대로 설명이 되었는지 모르겠네요. 만약 이해가 되지 않는 부분이 있으시다면, 해당 부분을 구체적으로 질문주시면 더 자세하게 답변드리겠습니다.

 

행복한 하루되세요 :)

  • 관리자
    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가 되는 것이죠.

     

    제대로 설명이 되었는지 모르겠네요. 만약 이해가 되지 않는 부분이 있으시다면, 해당 부분을 구체적으로 질문주시면 더 자세하게 답변드리겠습니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.