[알고리즘 기출문제] 아래의 그림은 5자리의 이진수를 입력받아 1의 보수와 2의 보수로 변환하여 각 배열에 저장하는 순서도입니다. 아래 순서도의 괄호 안 내용에 가장 적합한 번호를 [답항보기]에서 한 가지만 선택하시오. (단, 2진수는 첫 번째 자리는 배열의 가장 마지막 포인터에 입력받는다. 2진수 배열은 A(1)~A(5) 포인터로 가정한다.)
(배열 입력 예)
2진수 10111이 순서대로 입력되면 A(1)=1, A(2)=0, A(3)=1, A(4)=1, A(5)=1 순서로 배열 포인터에 기억된다.
(사용되는 변수)
A(P) : 2진수를 입력받는 배열
P : 배열 포인터
Comp1 : 1의 보수 저장 배열
Comp2 : 2의 보수 저장 배열
C : 자리 올림 수
2진수의 1의 보수, 2의 보수 변환 알고리즘 순서도
2진수의 1의 보수, 2의 보수 변환 알고리즘 순서도 답항보기
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
[순서도 분석 힌트]
① 자리 올림 수 초기치를 1로 지정 : 이유는 2의 보수는 1의 보수를 구한 후 1의 보수에 1을 더한 값이므로 자리 올림 수의 초기치를 1로 설정하여 1의 보수를 구한 후 C값을 더하여 2의 보수를 구합니다.
② 2진수 한 단위의 1의 보수를 구할 때 입력받은 2진수를 1로 빼면 2진 수 한 단위에 해당하는 1의 보수가 구해집니다.
이때 파악하여 두셔야 할 내용은 P의 초기치를 0으로 두고 P를 1씩 증가시키며 배열의 포인터로 결정한다는 것입니다. 곧, Comp1(1), Comp1(2) ... Comp1(5) 순서로 1의 보수가 배열에 순차적으로 입력됩니다.
③ 2의 보수를 구하기 위해서 배열 Comp1(5)에 기억된 1의 보수에 1을 더하면 됩니다. 이 때 순서도의 흐름에서 각 배열의 포인터는 5, 4, 3, 2, 1 순서로 반복하며 2의 보수가 Comp2 배열에 입력되도록 결정하고 있는데 이러한 배열의 포인터는 1의 보수를 구할 때 P가 5까지 증가하였으므로 P를 최초의 배열 포인터로 설정한 후 1회 반복할 때마다 P를 1씩 감소시키면서 배열 포인터 P가 1일 될 때까지 반복 수행한 후 P가 0이 되면 종료합니다.
※ 주의 : 배열 포인터의 값을 P값인 5로 결정한 후 P를 1감소시킨 후 반복합니다. 그래서 P가 0일 때 종료합니다.
④ 2의 보수를 Comp2 배열에 최종 입력하기 위해 1의 보수에 자리 올림 수를 더한 값을 2로 나눈 나머지를 Comp2 배열에 입력합니다. 최초 자리 올림 수 C가 1이므로 만약 Comp1(5)에 1이 기억되어 있었다면 결과는 2이므로 이를 2로 나누면 나머지가 0이 되고 만약 0이었다면 1을 더하였을 때 결과는 1이므로 나머지는 1이 됩니다. 이 수식을 기재하는 이유는 2진수의 경우 단 단위 수치는 0과 1만 존재하기 때문입니다.
⑤ 자리 올림 수를 결정하기 위한 수식입니다. 만약 1의 보수를 기억하는 배열 Comp1에 기억된 한 자리의 2진수가 0이면 C를 곱하였을 때 결과가 0이므로 자리 올림이 발생하지 않으므로 C의 값이 0으로 결정되고 이후 C가 0이라는 것은 배열 Comp1에 1이 기억되어 있더라도 계속 C의 값은 0이 됩니다.