책 내용 질문하기
모의고사 관련 질문 입니다.
도서
[2015] 정보처리기능사 실기
페이지
219
조회수
201
작성일
2015-03-26
작성자
첨부파일

교재 219p 알고리즘에 대해서 하나도 모르겠습니다.

우선 1번에 i+1이 들어간다는 것까지는 알겠는데

2번에 K에 왜 M%10 인지도 모르겠습니다.

저는 A 배열을

1 2 3 4 5 6 7 8 9 라고 두었습니다.

(0 1 2 3 4 5 6 7 8)

여기서 K가 M%10 이라면 K값은 9가 되는데

밑의 S(i)=A(k) 라면 S(0)=9 가 됩니다.

3번도 어느정도 이해는 가지만.. 왜 M을 10으로 나눠야하는지는 잘 모르겠습니다.

이런식으로 계속하다보면

S(0) = 9

S(1) = 8

S(2) = 7

S(3) = ,

S(4) = 6

S(5) = 5

S(6) = 4

S(7) = ,

S(8) = 3

S(9) = 2

S(10) = 1

이 됩니다.

그런데 이 알고리즘에서 S(10)배열이므로 제가 구한건 배열이 11개 이므로 맞지 않습니다.

질문을 요약해드리겠습니다.

1. 2번, 3번의 답의 이유를 알려주세요 2번 3번 모두 왜 답이 이런지 이해가 안갑니다.

2. 제가 위에 써드린것중에 착오가 있다면 디버깅 예시를 부탁드릴게요

감사합니다.

답변
2015-03-27 09:45:44

안녕하세요.

입력된 값으로 사용하신 123,456,789는 1억 2천 3삼백 4십 5만 6천 7백 8십 9로 1억이 넘는 수입니다.

문제의 처리 조건에는 1억 미만 즉 8자리까지의 값을 처리한다고 되어 있습니다.

배열이 10개 뿐이라 그런 것이죠. 1억이 넘으면 11자리 이상이 필요하기 때문입니다.

예를 들어 M에 1234가 입력되어 있다고 가정하겠습니다.

M은 0이 아니므로 No가 되어

(i+1) % 4를 계산합니다. 이 부분은 3자리마다 ,를 표시하기 위한 과정입니다.

현재 i는 0이므로 i+1, 즉 1을 4로 나누면 몫이 0이고 나머지는 1이 됩니다.

그러므로 No가 되어

K = M%10을 계산합니다. 이 부분은 뒤에서부터 한 자리씩 끊어서 저장하기 위한 과정입니다.

M이 1234이므로 M%10, 즉 1234를 10으로 나누면 몫은 123이 되고 나머지는 4가 됩니다.

나머지 4를 K에 저장합니다.

S(i) = A(K)을 수행합니다. 아 부분이 실질적으로 값을 저장하는 과정입니다.

현재 i는 0이고 K는 4이므로

S(0), 즉 S 배열의 0번째에 A(4)를 저장합니다. A(4)에는 4가 저장되어 있습니다.

A(0)에는 0, A(1)에는 1, ... A(4)에는 4 ... 가 각각 저장되어 잇고

S나 A의 배열의 위치는 0부터 시작됩니다. 즉 S(0) ~ S(9), A(0) ~ A(9)까지 10개의 배열이 있습니다.

그러므로 S(0)에는 4가 저장됩니다.

이제 M=M/10을 계산합니다. 이 부분은 맨 뒤의 값을 하나 저장한 후 앞의 3자리만 다음 계산을 수행하기 위해 떼어내는 과정입니다.

M이 1234인데 10으로 나눈 몫을 다시 M에 저장하므로 M은 123이 됩니다.

그리고 i를 1 증가시켜 i를 1로 만듧니다.

이제 M이 123, i가 1이 되어 위 과정을 반복합니다.

이렇게 되면 S(0)에는 4, S(1)에는 3, S(2)에는 2,

S(3)에는 "," <- i가 3일 때 (i+1)%4는 나머지가 0이 되므로 이때 ","를 저장하는 과정이 진행됩니다.

S(4)에는 1이 저장된 후 뒤에서 부터 반대로 출력하여 결과가 1,234가 출력되게 됩니다.

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

"
  • *
    2015-03-27 09:45:44

    안녕하세요.

    입력된 값으로 사용하신 123,456,789는 1억 2천 3삼백 4십 5만 6천 7백 8십 9로 1억이 넘는 수입니다.

    문제의 처리 조건에는 1억 미만 즉 8자리까지의 값을 처리한다고 되어 있습니다.

    배열이 10개 뿐이라 그런 것이죠. 1억이 넘으면 11자리 이상이 필요하기 때문입니다.

    예를 들어 M에 1234가 입력되어 있다고 가정하겠습니다.

    M은 0이 아니므로 No가 되어

    (i+1) % 4를 계산합니다. 이 부분은 3자리마다 ,를 표시하기 위한 과정입니다.

    현재 i는 0이므로 i+1, 즉 1을 4로 나누면 몫이 0이고 나머지는 1이 됩니다.

    그러므로 No가 되어

    K = M%10을 계산합니다. 이 부분은 뒤에서부터 한 자리씩 끊어서 저장하기 위한 과정입니다.

    M이 1234이므로 M%10, 즉 1234를 10으로 나누면 몫은 123이 되고 나머지는 4가 됩니다.

    나머지 4를 K에 저장합니다.

    S(i) = A(K)을 수행합니다. 아 부분이 실질적으로 값을 저장하는 과정입니다.

    현재 i는 0이고 K는 4이므로

    S(0), 즉 S 배열의 0번째에 A(4)를 저장합니다. A(4)에는 4가 저장되어 있습니다.

    A(0)에는 0, A(1)에는 1, ... A(4)에는 4 ... 가 각각 저장되어 잇고

    S나 A의 배열의 위치는 0부터 시작됩니다. 즉 S(0) ~ S(9), A(0) ~ A(9)까지 10개의 배열이 있습니다.

    그러므로 S(0)에는 4가 저장됩니다.

    이제 M=M/10을 계산합니다. 이 부분은 맨 뒤의 값을 하나 저장한 후 앞의 3자리만 다음 계산을 수행하기 위해 떼어내는 과정입니다.

    M이 1234인데 10으로 나눈 몫을 다시 M에 저장하므로 M은 123이 됩니다.

    그리고 i를 1 증가시켜 i를 1로 만듧니다.

    이제 M이 123, i가 1이 되어 위 과정을 반복합니다.

    이렇게 되면 S(0)에는 4, S(1)에는 3, S(2)에는 2,

    S(3)에는 "," <- i가 3일 때 (i+1)%4는 나머지가 0이 되므로 이때 ","를 저장하는 과정이 진행됩니다.

    S(4)에는 1이 저장된 후 뒤에서 부터 반대로 출력하여 결과가 1,234가 출력되게 됩니다.

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

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