교재 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. 제가 위에 써드린것중에 착오가 있다면 디버깅 예시를 부탁드릴게요
감사합니다.
안녕하세요.
입력된 값으로 사용하신 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가 출력되게 됩니다.
오늘도 즐거운 하루 되세요.
"