책 내용 질문하기
해설좀부탁드립니다. 답안지로 이해가안갑니다!!!
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
122
조회수
38
작성일
2018-07-16
작성자
탈퇴*원
첨부파일

해설좀부탁드립니다.! 왼쪽 그린거같이 저렇게까지는 해봣는데 그다음부터 이해가 잘안갑니다.

답변
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가 됩니다.

지금까지의 과정을 염두에 두면서 다시 한 번 직접 디버깅을 수행해 보면서 이해해 보세요.

오늘도 즐거운 하루 되세요.

  • *
    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가 됩니다.

    지금까지의 과정을 염두에 두면서 다시 한 번 직접 디버깅을 수행해 보면서 이해해 보세요.

    오늘도 즐거운 하루 되세요.

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