책 내용 질문하기
질문요
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
424
조회수
114
작성일
2017-04-04
작성자
첨부파일

424쪽 1번동그라미 이해가 안갑니다

447쪽 2번 동그라미 왜 <에 =이업는지 설명해주세요

453쪽 5번 동그라미가 이해가 안갑니다.

84쪽 3번 디버깅에 112까지는 이해가되는데 다음에는3인것같은데 그 이후로 이해가 안됩니다.

327쪽 답이 유형일과 같던데 오답인가요?

1) j=1,5,1아닌가요? i라면 이해가 안갑니다.

55쪽 6번 8진수구하는 법 가르쳐주세요

감사합니다.

답변
2017-04-04 11:34:52

안녕하세요.

1)

K는 자료를 읽을 때마다 1씩 더해집니다. 즉 K를 이용해 자료의 개수를 파악할 수 있는 것이죠.

하지만 문제의 처리조건을 보면 번호에 0이 입력되면 종료한다고 되어 있습니다.

즉 마지막에 번호가 0이 입력된 경우는 자료가 아니지만 자료 입력 종료 여부를 판단하기 위해 수행해야 하는 과정으로 이 때도 K에는 1이 더해집니다. 하지만 마지막에 입력된 자료는 처리를 위한 자료가 아니므로 더해지는 K에서 제외되어야 합니다.

그래서 ( ① )에 i < k-1 로 하여 K에 -1을 한 것입니다. 자료가 3개라면 실제 읽은 K의 값은 4이기 때문이죠.

이제 i를 이용해 자료의 개수만큼 즉 자료가 3개라면 i < 3인 동안 처리를 합니다.

처음에 i는 0이므로 Yes가 되어 i를 1증가시켜 1인 상태로 처리를 수행합니다.

이어서 i는 1이므로 Yes가 되어 i를 1증가시켜 2인 상태로 처리를 수행합니다.

이어서 i는 2이므로 Yes가 되어 i를 1증가시켜 3인 상태로 처리를 수행합니다.

이어서 i는 3이므로 No가 되어 출력하고 종료합니다.

2)

부등호에서 =가 들어가는 경우와 그렇지 않은 경우는

처리를 한 후 비교를 하는지

비교하고 처리하는지에 따라 다릅니다.

이 경우는 처리를 한 후 값을 비교하므로 9까지 처리한 후 비교를 수행하므로 <9 로 비교한 것입니다.

3)

NMG에는 남아있는 사과의 개수를 저장합니다.

⑬번에서 남은 J, 사과를 4등분한 후 자신이 가진(1/4)을 제외한 나머지 3/4인 J

4명까지 다 가지고 그 다음 작업을 위해 남겨둔 사과 A[5]

매번 분배할 때마다 남는 1개

이렇게 해서 NMG에는 J, A[5], 1을 더합니다.

4)

numAry에는 1, 0, 0, 0, 0 이 저장되어 있습니다.

numAry[0]에는 1이

numAry[1]에는 0이

numAry[2]에는 0이

numAry[3]에는 0이

numAry[4]에는 0이 저장되어 있는 것이죠.

바깥쪽 for문

j는 초기값 0을 가지고 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

안쪽 for문

i는 초기값 0을 가지고 종료값 i

다시

바깥쪽 for문

j는 증가값 ++j로 인해 1 증가되어 1이된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

안쪽 for문

i는 초기값 0을 가지고 종료값 i

numAry[J] += numAry[i];를 수행하여

numAry[1]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[1]의 값이 변경됩니다.

numAry[0]에는 1

numAry[1]에는 1

numAry[2]에는 0

numAry[3]에는 0

numAry[4]에는 0이 저장되어 있습니다.

안쪽 for문

i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

다시

바깥쪽 for문

j는 증가값 ++j로 인해 1 증가되어 2가된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

안쪽 for문

i는 초기값 0을 가지고 종료값 i

numAry[J] += numAry[i];를 수행하여

numAry[2]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

numAry[0]에는 1

numAry[1]에는 1

numAry[2]에는 1

numAry[3]에는 0

numAry[4]에는 0이 저장되어 있습니다.

안쪽 for문

i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

numAry[J] += numAry[i];를 수행하여

numAry[2]에 numAry[1]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

numAry[0]에는 1

numAry[1]에는 1

numAry[2]에는 2

numAry[3]에는 0

numAry[4]에는 0이 저장되어 있습니다.

안쪽 for문

i는 증가값 ++i로 인해 1 증가되어 2가된 상태에서 종료값 i

위와 같은 과정으로 이후 과정을 계속해서 수행합니다.


즉 j가 3일 때

numAry[3]은 처음에 0이 었지만

i가 0일 때

numAry[0]의 값이 1이 누적되어 numAry[3]은 1이 됩니다.

이어서 i가 증가하여 1일 때

numAry[1]의 값이 1이 누적되어 numAry[3]은 2가 됩니다.

이어서 i가 증가하여 2일 때

numAry[2]의 값이 2가 누적되어 numAry[3]은 4가 됩니다.

이어서 i가 증가하여 3일 때 i

같은 원리로 j가 4일 때는

numAry[4]에 numAry[0]~numAry[3]까지의 값이 누적되어

i가 0일 때 numAry[4]는 1

i가 1일 때 numAry[4]는 2

i가 2일 때 numAry[4]는 4

i가 3일 때 numAry[4]는 8

이 됩니다.

그래서 결국 최종적으로 nuymAry 배열의 값은

1 1 2 4 8이 되므로 화면에는 한 줄씩 출력되어

1

1

2

4

8

이 된 것입니다

수행 과정을 469쪽 디비겅 표와 함께 이해하시면 쉽게 이해하실 수 있습니다.

5)

행과 열의 위치가 다릅니다.

유형1은 A[i][J] = K 이고

유형2는 A[J][i] = K 입니다.

6)

10진수를 8진수로 변환하는 방법은 주어진 10진수 값을 8로 나누면서 그 때마다 나머지를 적어둡니다.

나누는 작업은 몫이 0이 나올 때까지입니다.

250 / 8 = 몫은 31, 나머지 2 <- 구해진 몫을 다시 8로 나눕니다.

31 / 8 = 몫은 3, 나머지 7 <- 구해진 몫을 다시 8로 나눕니다.

3 / 8 = 몫은 0, 나머지 3 <- 몫이 0이므로 지금까지 구해진 나머지를 거꾸로 적어줍니다.

10진수 250을 8진수로 변경하면 372가 됩니다.

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

  • *
    2017-04-04 11:34:52

    안녕하세요.

    1)

    K는 자료를 읽을 때마다 1씩 더해집니다. 즉 K를 이용해 자료의 개수를 파악할 수 있는 것이죠.

    하지만 문제의 처리조건을 보면 번호에 0이 입력되면 종료한다고 되어 있습니다.

    즉 마지막에 번호가 0이 입력된 경우는 자료가 아니지만 자료 입력 종료 여부를 판단하기 위해 수행해야 하는 과정으로 이 때도 K에는 1이 더해집니다. 하지만 마지막에 입력된 자료는 처리를 위한 자료가 아니므로 더해지는 K에서 제외되어야 합니다.

    그래서 ( ① )에 i < k-1 로 하여 K에 -1을 한 것입니다. 자료가 3개라면 실제 읽은 K의 값은 4이기 때문이죠.

    이제 i를 이용해 자료의 개수만큼 즉 자료가 3개라면 i < 3인 동안 처리를 합니다.

    처음에 i는 0이므로 Yes가 되어 i를 1증가시켜 1인 상태로 처리를 수행합니다.

    이어서 i는 1이므로 Yes가 되어 i를 1증가시켜 2인 상태로 처리를 수행합니다.

    이어서 i는 2이므로 Yes가 되어 i를 1증가시켜 3인 상태로 처리를 수행합니다.

    이어서 i는 3이므로 No가 되어 출력하고 종료합니다.

    2)

    부등호에서 =가 들어가는 경우와 그렇지 않은 경우는

    처리를 한 후 비교를 하는지

    비교하고 처리하는지에 따라 다릅니다.

    이 경우는 처리를 한 후 값을 비교하므로 9까지 처리한 후 비교를 수행하므로 <9 로 비교한 것입니다.

    3)

    NMG에는 남아있는 사과의 개수를 저장합니다.

    ⑬번에서 남은 J, 사과를 4등분한 후 자신이 가진(1/4)을 제외한 나머지 3/4인 J

    4명까지 다 가지고 그 다음 작업을 위해 남겨둔 사과 A[5]

    매번 분배할 때마다 남는 1개

    이렇게 해서 NMG에는 J, A[5], 1을 더합니다.

    4)

    numAry에는 1, 0, 0, 0, 0 이 저장되어 있습니다.

    numAry[0]에는 1이

    numAry[1]에는 0이

    numAry[2]에는 0이

    numAry[3]에는 0이

    numAry[4]에는 0이 저장되어 있는 것이죠.

    바깥쪽 for문

    j는 초기값 0을 가지고 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

    안쪽 for문

    i는 초기값 0을 가지고 종료값 i

    다시

    바깥쪽 for문

    j는 증가값 ++j로 인해 1 증가되어 1이된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

    안쪽 for문

    i는 초기값 0을 가지고 종료값 i

    numAry[J] += numAry[i];를 수행하여

    numAry[1]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[1]의 값이 변경됩니다.

    numAry[0]에는 1

    numAry[1]에는 1

    numAry[2]에는 0

    numAry[3]에는 0

    numAry[4]에는 0이 저장되어 있습니다.

    안쪽 for문

    i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

    다시

    바깥쪽 for문

    j는 증가값 ++j로 인해 1 증가되어 2가된 상태에서 종료값 j<5 조건에 만족하므로 안쪽 for문을 수행합니다.

    안쪽 for문

    i는 초기값 0을 가지고 종료값 i

    numAry[J] += numAry[i];를 수행하여

    numAry[2]에 numAry[0]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

    numAry[0]에는 1

    numAry[1]에는 1

    numAry[2]에는 1

    numAry[3]에는 0

    numAry[4]에는 0이 저장되어 있습니다.

    안쪽 for문

    i는 증가값 ++i로 인해 1 증가되어 1이된 상태에서 종료값 i

    numAry[J] += numAry[i];를 수행하여

    numAry[2]에 numAry[1]의 값을 누적합니다. 그러면 아래와 같이 numAry[2]의 값이 변경됩니다.

    numAry[0]에는 1

    numAry[1]에는 1

    numAry[2]에는 2

    numAry[3]에는 0

    numAry[4]에는 0이 저장되어 있습니다.

    안쪽 for문

    i는 증가값 ++i로 인해 1 증가되어 2가된 상태에서 종료값 i

    위와 같은 과정으로 이후 과정을 계속해서 수행합니다.


    즉 j가 3일 때

    numAry[3]은 처음에 0이 었지만

    i가 0일 때

    numAry[0]의 값이 1이 누적되어 numAry[3]은 1이 됩니다.

    이어서 i가 증가하여 1일 때

    numAry[1]의 값이 1이 누적되어 numAry[3]은 2가 됩니다.

    이어서 i가 증가하여 2일 때

    numAry[2]의 값이 2가 누적되어 numAry[3]은 4가 됩니다.

    이어서 i가 증가하여 3일 때 i

    같은 원리로 j가 4일 때는

    numAry[4]에 numAry[0]~numAry[3]까지의 값이 누적되어

    i가 0일 때 numAry[4]는 1

    i가 1일 때 numAry[4]는 2

    i가 2일 때 numAry[4]는 4

    i가 3일 때 numAry[4]는 8

    이 됩니다.

    그래서 결국 최종적으로 nuymAry 배열의 값은

    1 1 2 4 8이 되므로 화면에는 한 줄씩 출력되어

    1

    1

    2

    4

    8

    이 된 것입니다

    수행 과정을 469쪽 디비겅 표와 함께 이해하시면 쉽게 이해하실 수 있습니다.

    5)

    행과 열의 위치가 다릅니다.

    유형1은 A[i][J] = K 이고

    유형2는 A[J][i] = K 입니다.

    6)

    10진수를 8진수로 변환하는 방법은 주어진 10진수 값을 8로 나누면서 그 때마다 나머지를 적어둡니다.

    나누는 작업은 몫이 0이 나올 때까지입니다.

    250 / 8 = 몫은 31, 나머지 2 <- 구해진 몫을 다시 8로 나눕니다.

    31 / 8 = 몫은 3, 나머지 7 <- 구해진 몫을 다시 8로 나눕니다.

    3 / 8 = 몫은 0, 나머지 3 <- 몫이 0이므로 지금까지 구해진 나머지를 거꾸로 적어줍니다.

    10진수 250을 8진수로 변경하면 372가 됩니다.

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

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