【정답】

2012학년도 대수능 9월 모의평가 ( 프로그래밍 )영역 정답 및 해설

번호	1	2	3	4	5	6	7	8	9	10
정답	③	④	④	①	④	③	②	⑤	③	⑤
번호	11	12	13	14	15	16	17	18	19	20
정답	③	②	②	①	④	⑤	②	③	⑤	①

【해설】

1. [출제의도] 저급언어인 어셈블리어에 대해 이해하고 있는가?

[해설] 그림에 제시된 프로그래밍 언어는 어셈블리어이다. 어셈블리어는 저급언어로 어셈블러에 의해 기계어로 번역된다. 프로그래머가 작성한 프로그램을 원시프로그램(source program)이라고 하며, 기계어에 의해 번역된 프로그램을 목적프로그램이라 한다.

[오답피하기] 컴파일러는 고급언어를 번역한다.

2. [출제의도] 주어진 경로에서 최솟값을 갖는 경로를 계산하여 찾을 수 있는가?

[해설] 주어진 조건에 따라 각 경로에 따른 비용을 계산하면 그림과 같다.

A ～ F까지 이동할 수 있는 경로를 찾아 각 각의 비용을 계산하면 다음과 같다.

1) A - B - F : 160            2) A - D - F : 145

3) A - C - D - F : 155       4) A - D - E - F : 125

5) A - C - D - E - F : 135

따라서 최솟값을 갖는 경로는 A - D - E - F가 된다.

3. [출제의도] 배열에 저장된 값의 순위를 구할 수 있는가?

[해설] 배열에 저장된 값을 순위에 해당되는 개수만큼 ♠를 출력하는 프로그램이다. 즉, 배열에 있는 값을 하나씩 가져와 배열에 있는 모든 값들과 비교한다. 조건에 따라 제어변수 k에 의해 선택된 배열 값이 배열num 에 있는 값과 하나씩 비교하여  작거나 같을 때마다 ♠을 출력하게 된다. 실행 과정을 표로 나타내면 다음과 같다.

배열 값	작거나 같은 경우	♠출력
3	3 6 4 1	♠♠♠
6	3 6 4 1	♠
4	3 6 4 1	♠♠
1	3 6 4 1	♠♠♠♠

2012학년도 대수능 9월 모의평가 ( 프로그래밍 )영역 정답 및 해설

4. [출제의도] 주어진 알고리즘을 분석하여 값을 계산할 수 있는가?

[해설] 주어진 [알고리즘]을 단계별로 계산하여 시각의 변환할 수 있다. 단계1에서 H1 = 6이고 M1 = 40이다. 단계2에서 C = H1 × 60 + M1이므로 C = 400이다. X = C × 1. 39이므로 556이 된다. 단계4에서 556을 100으로 나눈 몫은 5가 되고 이 값은 H2에 저장된다. 단계5에서 X를 100으로 나눈 나머지는 56이 되므로 M2에 56이 저장된다. 따라서 최종 변환 시각을 출력하면 5시 56분이 된다.

5. [출제의도] 주어진 [조건]의 분석을 통해 기본 자료구조의 개념을 이해하고 있는가?

[해설] 입구 A에 투입된 공이 차례로 3개씩 B로 이동하므로 B에 차례대로 7 5 8이 쌓이게 된다. 공이 3개가 쌓였으므로 피스톤이 동작하여 순서대로 공을 밀어내면 8 5 7의 순서로 C출구로 나가게 된다. 계속해서 2 9 3의 순서로 B에 쌓인 공은 피스톤에 의해 3 9 2의 순서로 C 출구로 나가게 된다. 따라서 C에서 나오는 공의 순서는 8 5 7 3 9 2의 순서가 된다.

6. [출제의도] 순서도에 의해 출력되는 값을 수식으로 표현할 수 있는가?

[해설] 순서도에서 s = 0, a = 1, n = 0으로 초기화 되어 있다. n < 5조건을 만족하는 동안 s = s + a를 수행한다. 맨 처음 s에는 a = 1이므로 1이 더해진다. 결국 n < 5조건을 만족하는 동안 a = -1 * a / 2를 계산하여 s에 더해준다. 따라서 순서도에 의해 계산되는 수식은 1 - 1/2 + 1/4 - 1/8 + 1/16이다.

7. [출제의도] 약수의 개수를 구할 수 있는가?

[해설]알고리즘을 분석해 보면 N = 0, S = 12, K = 0으로 단계1에서 초기화 되었다. K값을 1증가 시킨 후 S를 나누었을 때 나머지가 0이면 N의 값은 1 증가된다.  K < S인 동안 K값을 1 증가 시켜 S를 나누었을 때 나머지가 0이 되는 경우에만 N 은 1씩 증가한다. 따라서 K값이 1, 2, 3, 4, 6, 12일 때 S값은 나누어떨어지므로  N의 값은 6이 된다.

8. [출제의도] 변수 선언 및 초기화를 할 수 있는가?

[해설] 변수 선언 및 초기화로 적절한 것을 찾는 문제이다. item변수에는 “천체망원경”이라는 문자열이 들어가므로 문자열을 저장할 수 있도록 선언되어야 한다. num변수에는 정수형 숫자를 저장하게 되므로 정수형으로 선언되어야 하며 숫자가 저장된다. lens에 저장되는 값은 1.5이므로 실수형이다. 따라서 1.5를 저장하기 위해서는 실수형 변수로 선언해 주어야 한다. tripod에는 알루미늄이라는 문자열이 저장되므로 문자열을 저장할 수 있는 변수를 선언해 주어야 한다.

2012학년도 대수능 9월 모의평가 ( 프로그래밍 )영역 정답 및 해설

9. [출제의도] 주어진 조건에 맞는 논리식을 표현할 수 있는가?

[해설] [조건]에서 정수기 Y가 동작하기 위한 조건은 컵 감지센서 A가 컵을 감지하고 작동 버튼 B가 눌려진 상태여야 한다. 따라서 컵 감지센서 A와 작동 버튼 B는 논리곱으로 연결되어야 한다.

10. [출제의도] 프로그램의 실행결과를 조건에 따라 표현할 수 있는가?

[해설] 프로그램을 분석해 보면 배열에 저장된 1, 0, 1, 1의 값을 이용하여 각 각의 출력결과를 구하게 된다. 조건문에서 현재의 배열 값과 다음의 배열 값이 같으면 현재의 배열에 0을 저장하고 아니면 1을 저장하게 된다. 위 과정을 표로 나타내면 다음과 같다.

0	1	2	3
1	0	1	1

k = 0일 때 :

0	1	2	3
1	1	0	1

0	1	2	3
1	1	0	1

k = 1일때 :

0	1	2	3
0	1	1	1

0	1	2	3
0	1	1	1

k = 2일때 :

0	1	2	3
1	0	0	1

맨 앞의 비트는 음표를 나타내므로 조건에 따라 악보로 표현해 보면 k = 0일 때 8분 음표 솔, k = 1일때 4분 음표 시, k = 2일 때 8분음표 도가 표시된다. 따라서 실행 결과 값을 악보로 표현하면 다음과 같다.

2012학년도 대수능 9월 모의평가 ( 프로그래밍 )영역 정답 및 해설

11. [출제의도] 프로그래밍 관련 용어에 대해 알고 있는가?

[해설]프로그래밍 관련 용어에 대해 묻고 있는 문제이다. 프로그램의 오류수정 작업은 디버깅이라 하며 ‘참’인 명제이므로 철수는 1구간 이동하게 된다. 알고리즘이란 문제 해결을 위한 방법과 절차를 말하므로 ‘참’인 명제이므로 철수는 2구간 이동한다.  어떤 문제든지 결과를 구하기 위한 알고리즘은 여러 가지 방법이 존재하므로 ‘거짓’인 명제이므로 철수는 이동하지 않는다. 따라서 철수의 최종위치는 C가 된다.

12. [출제의도] 소수 구하는 프로그램을 이해하고 분석할 수 있는가?

[해설] 프로그램은 12부터 2까지 범위에 있는 소수를 구하는 프로그램이다. k값이 12인 경우 12보다 1작은 11부터 차례대로 나누어 보면 6일 때 12는 나누어진다. break(VB: Exit For)문에 의해 반복문을 빠져 나왔을 때 m값은 1이 아니므로 출력이 되지 않는다. k값을 1감소시켜 11일때 10부터 2까지 차례대로 나누었을 때 나누어 지지 않는다. 반복문에서 2까지 나누었을 때 나누어 지지 않으므로 m값을 1감소시키면 m은 1이 된다. 1은 m >= 2 조건에 맞지 않으므로 반복문을 빠져 나오게 된다. 조건문에서 m = 1일 때 출력이 되므로 11은 출력이 된다. 따라서 2부터 12까지 범위에 있는 소수를 구하면 11 7 5 3 2가 된다.

13. [출제의도] 주어진 프로그램을 분석하여 올바른 출력결과를 얻을 수 있는가?

[해설] tmp는 0으로 초기화 되어 있으며 k값은 1부터 4까지 변화된다. 배열에 있는 값을 하나씩 차례대로 비교하여 같지 않으면 k - tmp값과 a[k-1](VB : a(k-1))값을 출력하게 된다. 맨 먼저 2와 1을 비교해보면 같지 않으므로 1 1이 출력되면서 tmp값은 1로 변한다. k = 2 일때 1과 2는 같지 않으므로 k - tmp값인 1이 출력되고 2가 출력되면서 tmp값은 2가 된다. k값이 3일 때 1과 1은 같으므로 조건문을 수행하지 않는다. k = 4일 때 0과 1은 같지 않으므로 k - tmp값인 2가 출력되며  a[k-1](VB : a(k-1))의 값인 1이 출력된다. 따라서 최종출력결과는 1 1 1 2 2 1이다.

14. [출제의도] 주어진 순서도를 분석할 수 있는가?

[해설] 순서도에서 a = 1로 k = 0으로 초기화 되었다.  a <= 5를 만족하는 동안 b = 1로 초기화 한 후 b <= a를 만족하는 동안 b값을 k에 더하게 된다.  a = 1일 때 b <= a를 만족하므로 k에 1이 더해진다. a = 2일 때 k 에 1이 더해지며 b가 3이 되어 b <= a조건을 만족하지 않으므로  a를 1증가 시켜 a = 3이 된다. a가 3일 때 b값은 1과 3이 될 수 있으므로 k에 1과 3이 k에 더해진다. a = 4인 경우에도 역시 1과 3이 더해지며 a = 5일 때 k에는 1과 3,  5가 더해진다. 따라서 k의 최종 값은 1 + 1 + 1 + 3 + 1 + 3 + 1 + 3 + 5가 되어 19가 된다.

15. [출제의도] 프로그램 전체에 대한 분석을 할 수 있는가?

[해설] 배열 data()는 전역으로 선언되었다. 따라서 어느 함수에서나 사용이 가능하다. search()함수는 값을 반환하지 않으며(C언어 :void, VB : sub 프로시저) 함수 호출시 호출한 매개변수 num을 실인수라고 한다.

16. [출제의도] 함수의 동작 과정을 이해하고 있는가?

[해설] 4를 입력하면 search(4)가 전달되었을 때 배열에 있는 원소 중 4의 값을 찾으면 n = 4가 된다. 따라서 4부터 1까지 배열에 있는 원소들을 한 칸씩 뒤로 이동시킨다. 그런 다음 num[0](VB : num(0))에 4를 저장한다.

3	2	1	5	4
4	3	2	1	5	: 4가 입력되었을 때 새롭게 생성된 배열

5를 입력하면 search(5)가 전달되었을 때 배열에 있는 원소 중 5의 값을 찾으면 n = 4가 된다. 따라서 4부터 1까지 배열에 있는 원소들을 한 칸씩 뒤로 이동시킨다. 그런 다음 num[0](VB : num(0))에 4를 저장한다.

4	3	2	1	5
5	4	3	2	1	: 5가 입력되었을 때 새롭게 생성된 배열

따라서 data배열을 출력하면 5 4 3 2 1이 된다.

17. [출제의도] 주어진 순서도를 논리식을 표현할 수 있는가?

[해설] 순서도에서 보일러 Y가 동작할 조건은 “실내온도 < 20”이거나  “실내온도 < 25 이하이고 습도가 60이상”인 경우이다.

18. [출제의도] 배열을 이용한 함수 프로그램을 이해할 수 있는가?

[해설] k = 0, n = 5가 fn함수에 전달된다. 따라서 a = 0, b= 5가 된다. 0, 5의 값이 1이므로 함수를 호출한다. 함수 호출 후 반환 값은 b = 4가 되돌려 진다. k = 1, n = 4일 때 sa[k][n]( VB : sa(k, a))값은 0이므로 함수를 호출 하지 않는다. k = 2, n = 4일 때 sa[k][n]( VB : sa(k, a))값은 1이므로 함수를 호출한다. sa[a][b-1]( VB : sa(a, b-1) )의 값이 1이므로 b = b - 1이므로 b = 3이 된다. 따라서 출력되는 n값은 3이다.

19. [출제의도] 주어진 프로그램을 분석할 수 있는가?

[해설] 2와 3을 입력했을 때 k = 1부터 3까지 증가 하며 함수 fn을 호출 한다. 함수호출 후 s에 더해지는 값을 계산 하면 다음과 같다.

k 값	함수 호출 값	함수 리턴 값	누적되는 s값
1	fn(2, 1)	2	1 * 2
2	fn(2,2)	2*2	1 * 2 + 2 *( 2 * 2 )
3	fn(2,3)	2*2*2	1 * 2 + 2 *( 2 * 2 ) + 3*(2*2*2)

따라서 출력되는 s값은 1 * 2 + 2 * ( 2 * 2 )+ 3 * ( 2 * 2 * 2)이 되어 2 + 8 + 24이므로 34가 된다.

20. [출제의도] 배열을 이용한 마방진 프로그램을 이해할 수 있는가?

[해설] 프로그램 분석을 통해 배열을 이용한 마방진을 구성해 가면 다음과 같다.

1부터 11까지 마방진의 숫자를 채워 가면 다음과 같다.

① 초기 값 a = 0, b = 2일 때

s[a][b] = 1 ( VB : s(a, b) = 1)

	0	1	2	3	4
0			1
1
2
3
4

② 만약  a = 0이면

a = 4, b = b + 1 이므로, 행의 값은 4, 열    의 값은 현재 열 보다 1증가 후 숫자 입력

	0	1	2	3	4
0			1
1
2
3
4				2	9

③ 일반적인 경우 a = a - 1, b = b +1

(즉, 행 1 감소, 열 1증가 후 숫자 입력)

	0	1	2	3	4
0			1	8
1		5	7
2	4	6
3	10				3
4				2

④ 만약 b = 4이면

a = a - 1, b = 0으로 이동 후 숫자 입력

(즉, 행 1 감소, 열의 위치는 0)

	0	1	2	3	4
0			1
1		5
2	4
3	10				3
4				2

④ 만약  k - 1 값을 5로 나누었을 때 나머지가 0이면 a = a + 1(즉, 행1 증가 후 값 입력)

	0	1	2	3	4
0			1
1		5
2	4	6
3					3
4	11			2

최종 마방진의 형태

	0	1	2	3	4
0	17	24	1	8	15
1	23	5	7	14	16
2	4	6	13	20	22
3	10	12	19	21	3
4	11	18	25	2	9

따라서 최종 출력 값은 10 12 19 21 3이 된다.