책 내용 질문하기
정보처리기사 실기 알고리즘 127페이지 38번 질문 드립니다.
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
127
조회수
544
작성일
2019-03-25
작성자
탈퇴*원
첨부파일

문제해설을 보아도 소스코드가 잘 이해가 되질 않네요 ㅠㅠ 한줄씩 설명좀 부탁드릴수 있을까요 부탁드립니다.

답변
2019-03-26 10:10:06

안녕하세요 길벗수험서 운영팀입니다.

 

먼저 배열선언부는 배열 a에 값을 아래와 같이 저장한다는 의미입니다.

(NONE 부분은 존재하지 않음을 의미합니다.)

 

 

1

1

0

1

0

1

0

1

0

 NONE

 

 

tot과 totsu는 0으로 초기화 한후,

 

for(int i[]:a) 는 2차원 배열 a의 각 요소들을 새로 선언된 i라는 1차원 배열로 받아들이겠다는 의미입니다.

2차원 배열의 각 요소는 1차원 배열 2개, 위의 표에서 1행과 2행을 의미합니다.

즉 2번의 회전을 하게 되는데,

첫번쨰 회전에서 i[]는 { 1, 1, 0, 1, 0 }이라는 값을 가진 배열이 되겠고,

두번째 회전에서 i[]는 { 1, 0, 1, 0 }이라는 값을 가진 배열이 되겠죠.

 

다음 for문을 보죠.

for (int j : i) tot += j; 

int j를 선언하면서 j는 i의 각 요소를 하나씩 받으면서 반복하겠다는 의미입니다.

즉, i[]가 { 1, 1, 0, 1, 0 }일 때, j는 저 요소들을 하나씩 저장하면서 5회 반복하겠고,

i[]가 { 1, 0, 1, 0 }일 때, j는 요소들을 하나씩 저장하면서 4회 반복하면서, 

tot += j는 총 9회 반복하게 되겠네요. 

각 요소의 값을 더하는 과정이니 1만 모두 더하게 되면 tot은 5가 되겠네요.

 

다음 totSu = totSu + i.length; 는 for(int j:i)에 속한 코드가 아닙니다. 해당 반복문의 코드는 tot+=j;에서 세미콜론이 등장하면서 끝나버렸죠.

for(inti[]:a)에 속한 코드이니 for(int j:i)가 끝날 때마다 한번씩 수행되서 총 2회 수행되는 코드입니다.

i.length는 배열 i의 길이를 의미하므로, 첫번째 회전에는 5, 두번째 회전에는 4가 됩니다.

totsu는 최종적으로 9가 되겠죠.

 

결국 마지막에 totsu는 9, tot은 5가 됩니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-03-26 10:10:06

    안녕하세요 길벗수험서 운영팀입니다.

     

    먼저 배열선언부는 배열 a에 값을 아래와 같이 저장한다는 의미입니다.

    (NONE 부분은 존재하지 않음을 의미합니다.)

     

     

    1

    1

    0

    1

    0

    1

    0

    1

    0

     NONE

     

     

    tot과 totsu는 0으로 초기화 한후,

     

    for(int i[]:a) 는 2차원 배열 a의 각 요소들을 새로 선언된 i라는 1차원 배열로 받아들이겠다는 의미입니다.

    2차원 배열의 각 요소는 1차원 배열 2개, 위의 표에서 1행과 2행을 의미합니다.

    즉 2번의 회전을 하게 되는데,

    첫번쨰 회전에서 i[]는 { 1, 1, 0, 1, 0 }이라는 값을 가진 배열이 되겠고,

    두번째 회전에서 i[]는 { 1, 0, 1, 0 }이라는 값을 가진 배열이 되겠죠.

     

    다음 for문을 보죠.

    for (int j : i) tot += j; 

    int j를 선언하면서 j는 i의 각 요소를 하나씩 받으면서 반복하겠다는 의미입니다.

    즉, i[]가 { 1, 1, 0, 1, 0 }일 때, j는 저 요소들을 하나씩 저장하면서 5회 반복하겠고,

    i[]가 { 1, 0, 1, 0 }일 때, j는 요소들을 하나씩 저장하면서 4회 반복하면서, 

    tot += j는 총 9회 반복하게 되겠네요. 

    각 요소의 값을 더하는 과정이니 1만 모두 더하게 되면 tot은 5가 되겠네요.

     

    다음 totSu = totSu + i.length; 는 for(int j:i)에 속한 코드가 아닙니다. 해당 반복문의 코드는 tot+=j;에서 세미콜론이 등장하면서 끝나버렸죠.

    for(inti[]:a)에 속한 코드이니 for(int j:i)가 끝날 때마다 한번씩 수행되서 총 2회 수행되는 코드입니다.

    i.length는 배열 i의 길이를 의미하므로, 첫번째 회전에는 5, 두번째 회전에는 4가 됩니다.

    totsu는 최종적으로 9가 되겠죠.

     

    결국 마지막에 totsu는 9, tot은 5가 됩니다.

     

    행복한 하루되세요 :)

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