책 내용 질문하기
기출문제집 제2회 47페이지 알고리즘
도서
[2013] 정보처리기능사 실기
페이지
47
조회수
120
작성일
2013-07-04
작성자
첨부파일

답안을 보고도 잘모르겟기에 알고리즘 원리를 부탁드립니다

감사합니다

답변
2013-07-05 10:12:32

안녕하세요.

1234567을 천 단위마다 콤마를 표시하여 출력하는 알고리즘입니다.

단 콤마를 표시할 자리를 뒤에서부터 거꾸로 위치를 찾아가면서 표시하는 것이죠.

1234가 입력되었다고 가정하고 진행한 디버깅 표를 보시면

M에 1234가 입력되었다고 가정하였습니다.

i가 0일 때 (i+1)%4는 나머지가 0이 아니므로 NO가 되어 아래쪽으로 처리됩니다.

Yes인 경우는 천단위 자리인 경우로 그 때만 콤마(,)를 표시합니다.

K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

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

그래서 K는 4가 저장되죠.

S(i) = A(K)를 수행합니다. 즉 S(0) = A(4)이 되는 것이죠. S의 0번째 배열에 A(4)의 값 4를 저장합니다.

A의 값을 46쪽 처리조건에 A 배열은 위치가 0부터 시작하여

A(0)에 0, A(1)에 1, A(2)에 2 .... A(10)에 9가 저장되어 있다고 제시되어 있습니다.

M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

1234를 10으로 나누면 몫이 123이 되죠.

M에 123이 저장됩니다.

이어서 i=i+1을 수행하여 i가 1이 됩니다.

다시 위로 처리가 이동하여 M이 아직 0이 아니므로 아래쪽으로 이동합니다.

(i+1)%4는 나머지가 2, 즉 0이 아니므로 NO가 되어 아래쪽으로 처리됩니다.

K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

123을 10으로 나누면 몫은 12이 되고 나머지는 3이 됩니다.

그래서 K는 3이 저장되죠.

S(i) = A(K)를 수행합니다. 즉 S(1) = A(3)이 되는 것이죠. S의 1번째 배열에 A(3)의 값 3을 저장합니다.

M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

123을 10으로 나누면 몫이 12가 되죠.

M에 12가 저장됩니다.

이어서 i=i+1을 수행하여 i가 2가 됩니다.

다시 위로 처리가 이동하여 M이 아직 0이 아니므로 아래쪽으로 이동합니다.

(i+1)%4는 나머지가 3, 즉 0이 아니므로 NO가 되어 아래쪽으로 처리됩니다.

K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

12를 10으로 나누면 몫은 1이 되고 나머지는 2가 됩니다.

그래서 K는 2가 저장되죠.

S(i) = A(K)를 수행합니다. 즉 S(2) = A(2)가 되는 것이죠. S의 2번째 배열에 A(2)의 값 2를 저장합니다.

M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

12를 10으로 나누면 몫이 1이 되죠.

M에 1이 저장됩니다.

이어서 i=i+1을 수행하여 i가 3이 됩니다.

다시 위로 처리가 이동하여 M이 아직 0이 아니므로 아래쪽으로 이동합니다.

(i+1)%4는 나머지가 0입니다. YES가 되어 오른쪽으로 처리가 이동됩니다.

S(i) = ",", 즉 S(3) = ","가 되는 것이죠. S의 3번째 배열에 ","를 저장합니다.

i=i+1을 수행하여 i는 4가 됩니다.

K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

1을 10으로 나누면 몫은 0이 되고 나머지는 1이 됩니다.

그래서 K는 1이 저장되죠.

S(i) = A(K)를 수행합니다. 즉 S(4) = A(1)가 되는 것이죠. S의 4번째 배열에 A(4)의 값 4를 저장합니다.

M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

1을 10으로 나누면 몫이 0이 되죠.

M에 0이 저장됩니다.

이어서 i=i+1을 수행하여 i가 5가 됩니다.

다시 위로 처리가 이동합니다. M이 0이므로 Yes가 되어 오른쪽으로 이동합니다.

i=i-1을 수행하여 i는 4가 됩니다.

i>=0, 즉 i가 0보다 크거가 같은지 묻습니다. Yes이므로 아래쪽으로 이동합니다.

S(i), 즉 S(4)를 출력합니다. 1이 출력됩니다.

i=i-1을 수행하여 i는 3이 됩니다.

위 과정은 앞서 S 배열에 저장한 1,234를 출력하는 것입니다.

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

"
  • *
    2013-07-05 10:12:32

    안녕하세요.

    1234567을 천 단위마다 콤마를 표시하여 출력하는 알고리즘입니다.

    단 콤마를 표시할 자리를 뒤에서부터 거꾸로 위치를 찾아가면서 표시하는 것이죠.

    1234가 입력되었다고 가정하고 진행한 디버깅 표를 보시면

    M에 1234가 입력되었다고 가정하였습니다.

    i가 0일 때 (i+1)%4는 나머지가 0이 아니므로 NO가 되어 아래쪽으로 처리됩니다.

    Yes인 경우는 천단위 자리인 경우로 그 때만 콤마(,)를 표시합니다.

    K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

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

    그래서 K는 4가 저장되죠.

    S(i) = A(K)를 수행합니다. 즉 S(0) = A(4)이 되는 것이죠. S의 0번째 배열에 A(4)의 값 4를 저장합니다.

    A의 값을 46쪽 처리조건에 A 배열은 위치가 0부터 시작하여

    A(0)에 0, A(1)에 1, A(2)에 2 .... A(10)에 9가 저장되어 있다고 제시되어 있습니다.

    M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

    1234를 10으로 나누면 몫이 123이 되죠.

    M에 123이 저장됩니다.

    이어서 i=i+1을 수행하여 i가 1이 됩니다.

    다시 위로 처리가 이동하여 M이 아직 0이 아니므로 아래쪽으로 이동합니다.

    (i+1)%4는 나머지가 2, 즉 0이 아니므로 NO가 되어 아래쪽으로 처리됩니다.

    K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

    123을 10으로 나누면 몫은 12이 되고 나머지는 3이 됩니다.

    그래서 K는 3이 저장되죠.

    S(i) = A(K)를 수행합니다. 즉 S(1) = A(3)이 되는 것이죠. S의 1번째 배열에 A(3)의 값 3을 저장합니다.

    M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

    123을 10으로 나누면 몫이 12가 되죠.

    M에 12가 저장됩니다.

    이어서 i=i+1을 수행하여 i가 2가 됩니다.

    다시 위로 처리가 이동하여 M이 아직 0이 아니므로 아래쪽으로 이동합니다.

    (i+1)%4는 나머지가 3, 즉 0이 아니므로 NO가 되어 아래쪽으로 처리됩니다.

    K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

    12를 10으로 나누면 몫은 1이 되고 나머지는 2가 됩니다.

    그래서 K는 2가 저장되죠.

    S(i) = A(K)를 수행합니다. 즉 S(2) = A(2)가 되는 것이죠. S의 2번째 배열에 A(2)의 값 2를 저장합니다.

    M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

    12를 10으로 나누면 몫이 1이 되죠.

    M에 1이 저장됩니다.

    이어서 i=i+1을 수행하여 i가 3이 됩니다.

    다시 위로 처리가 이동하여 M이 아직 0이 아니므로 아래쪽으로 이동합니다.

    (i+1)%4는 나머지가 0입니다. YES가 되어 오른쪽으로 처리가 이동됩니다.

    S(i) = ",", 즉 S(3) = ","가 되는 것이죠. S의 3번째 배열에 ","를 저장합니다.

    i=i+1을 수행하여 i는 4가 됩니다.

    K = M%10, 즉 M을 10으로 나눈 나머지를 K에 저장합니다.

    1을 10으로 나누면 몫은 0이 되고 나머지는 1이 됩니다.

    그래서 K는 1이 저장되죠.

    S(i) = A(K)를 수행합니다. 즉 S(4) = A(1)가 되는 것이죠. S의 4번째 배열에 A(4)의 값 4를 저장합니다.

    M = M/10, 즉 M을 10으로 나눈 몫을 M에 다시 저장합니다.

    1을 10으로 나누면 몫이 0이 되죠.

    M에 0이 저장됩니다.

    이어서 i=i+1을 수행하여 i가 5가 됩니다.

    다시 위로 처리가 이동합니다. M이 0이므로 Yes가 되어 오른쪽으로 이동합니다.

    i=i-1을 수행하여 i는 4가 됩니다.

    i>=0, 즉 i가 0보다 크거가 같은지 묻습니다. Yes이므로 아래쪽으로 이동합니다.

    S(i), 즉 S(4)를 출력합니다. 1이 출력됩니다.

    i=i-1을 수행하여 i는 3이 됩니다.

    위 과정은 앞서 S 배열에 저장한 1,234를 출력하는 것입니다.

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

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