프로그래밍의 기초(의사 코드 트레이스)

두 정수 a, b를 뺄셈으로 같게 만들어 가는 다음 프로그램을 실행한 후의 k의 값은?

integer: a ← 48, b ← 18, k ← 0
while (a ≠ b)
  if (a > b)
    a ← a − b
  else
    b ← b − a
  endif
  k ← k + 1
endwhile
  1. A3
  2. B4
  3. C6
정답과 해설 보기

정답: B. 4

큰 쪽에서 작은 쪽을 빼는 것을 둘이 같아질 때까지 반복하는, 뺄셈에 의한 유클리드 호제법입니다. (a, b)는 (48, 18) → (30, 18) → (12, 18) → (12, 6) → (6, 6)으로 바뀌고, 뺄셈은 4회이므로 k = 4입니다. 마지막의 a = b = 6이 최대공약수입니다. 나머지(mod)를 사용하는 호제법이라면 48 mod 18 = 12, 18 mod 12 = 6, 12 mod 6 = 0의 3회로 끝납니다.

이 분야 연습하기 분야로 돌아가기

프로그래밍의 기초(의사 코드 트레이스)의 다른 문제

  1. 다음 함수 isLeap은 서기 y년이 윤년이면 true를 반환한다. and는 or보다 먼저 계산한다. isLeap(y)가 true를 반환하는 y는?
  2. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 pow를 pow(2, 10)으로 호출했을 때, pow가 호출되는 횟수(최초 호출 포함)는?
  3. 다음 함수 s를 s(7)로 호출했을 때의 반환값은?
  4. 다음 프로시저 p를 p(3)으로 호출했을 때, 출력되는 값의 순서는?
  5. 다음 함수 fib를 fib(10)으로 호출했을 때의 반환값은?