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

다음 함수 isPal은 문자열형 배열 s의 문자 순서가 앞에서 읽어도 뒤에서 읽어도 같으면(회문) true를 반환한다. 배열의 인덱스는 1부터 시작한다. 프로그램 중의 【a】에 들어갈 것은?

○boolean: isPal(string array: s)
  integer: n ← length(s)
  for (i from 1 to n ÷ 2 step 1)
    if (s[i] ≠ s[【a】])
      return false
    endif
  endfor
  return true
  1. An − i + 1
  2. Bn − i
  3. Cn + i − 1
정답과 해설 보기

정답: A. n − i + 1

i번째 문자는 뒤에서 i번째 문자와 비교합니다. 뒤에서 1번째는 s[n], 2번째는 s[n − 1]이므로 뒤에서 i번째는 s[n − i + 1]입니다. 비교는 앞쪽 절반만으로 충분하며, n = 5이면 n ÷ 2 = 2.5이므로 i = 1, 2에 대해 s[1]과 s[5], s[2]와 s[4]를 비교합니다(가운데 s[3]은 비교할 필요가 없습니다). n − i로 하면 하나 어긋나서, 회문인 "level"에서도 s[1]의 "l"과 s[4]의 "e"를 비교하여 false를 반환합니다.

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

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

  1. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 f를 f(9087)로 호출했을 때의 반환값은?
  2. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 toBin을 toBin(12)로 호출했을 때의 반환값은?
  3. 두 정수 a, b를 뺄셈으로 같게 만들어 가는 다음 프로그램을 실행한 후의 k의 값은?
  4. 다음 함수 isLeap은 서기 y년이 윤년이면 true를 반환한다. and는 or보다 먼저 계산한다. isLeap(y)가 true를 반환하는 y는?
  5. ÷는 나눗셈이며, 정수형 변수(인수 포함)에 대입할 때는 소수점 이하를 버린다. 다음 함수 pow를 pow(2, 10)으로 호출했을 때, pow가 호출되는 횟수(최초 호출 포함)는?