자료 구조와 알고리즘

함수 f(x, y)를 'y가 0이면 x를 반환하고, 그렇지 않으면 f(y, x mod y)를 반환한다'로 정의한다. f(84, 36)을 호출했을 때의 반환값과, f가 호출되는 횟수(첫 호출 포함)의 조합은?

  1. A반환값 12, 호출 횟수 3회
  2. B반환값 12, 호출 횟수 4회
  3. C반환값 6, 호출 횟수 3회
정답과 해설 보기

정답: A. 반환값 12, 호출 횟수 3회

f(84, 36)은 84 mod 36 = 12이므로 f(36, 12)를 호출하고, 36 mod 12 = 0이므로 f(12, 0)을 호출하며, y가 0이므로 12를 반환합니다. 호출은 f(84, 36), f(36, 12), f(12, 0)의 3회이며, 이는 유클리드 호제법에 의한 최대공약수 계산입니다. 이 함수는 재귀 호출의 결과를 그대로 반환하는 꼬리 재귀이므로, 컴파일러가 꼬리 호출 최적화를 수행하면 루프로 변환할 수 있어, 호출이 깊어져도 스택을 계속 소비하지 않습니다.

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

자료 구조와 알고리즘의 다른 문제

  1. 피보나치 수를 구하는 함수 fib(n)을 'n이 1 이하이면 n을 반환하고, 그렇지 않으면 fib(n−1) + fib(n−2)를 반환한다'로 재귀적으로 정의했다. fib(5)를 호출했을 때 fib가 호출되는 횟수는 첫 호출을 포함하여 몇 회인가?
  2. 1엔, 4엔, 6엔의 3종류 동전으로 8엔을 지불한다. 큰 동전부터 쓸 수 있는 만큼 쓰는 탐욕 알고리즘으로 정했을 때의 개수와 최소 개수의 관계로 올바른 것은?
  3. 용량 8인 배낭에 (무게, 가치)가 (2, 3), (3, 4), (4, 5), (5, 6)인 4개의 물건 중에서 골라 넣는다. 각 물건은 하나씩밖에 없고 나눌 수 없다. 무게의 합계가 8 이하일 때 가치 합계의 최댓값은 얼마인가?
  4. 문자열 안에서 패턴을 찾는 BM법(보이어-무어 알고리즘)의 특징으로 올바른 것은?
  5. 가변 길이 배열에서, 용량이 가득 찼을 때 원소를 추가하면 2배 용량의 영역을 새로 확보하여 모든 원소를 복사한다. 용량 1인 빈 배열에 원소를 하나씩 1,000개 추가했을 때, 복사되는 원소의 총수는?