답안을 보고도 잘모르겟기에 알고리즘 원리를 부탁드립니다
감사합니다
안녕하세요.
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를 출력하는 것입니다.
오늘도 즐거운 하루 되세요.
"