2013년 12월 14일 토요일

제 1회 수학 능력 시험 결과

제 1회 수학 능력 시험의 결과입니다.

영역별로 점수를 묶어서 채점했습니다.
제 1 영역은 1번~4번,
제 2 영역은 5번~6번,
제 3 영역은 7번~8번,
제 4 영역은 9번~12번입니다.

채점 결과는 이의 제기시 재검토후 바뀔 수 있습니다.
이의제기는 12월 16일 0시 직전까지 받습니다.
앞에 naver가 붙은 사람은 네이버 id입니다.

검토위원 놀먹 시간 초과로 실격

1. TaeK : 2등급 (10%)
1. 50
2. 40
3. 15
4. 70

total 175

2. naver waylight3 : 3등급(20%)
1. 40
2. 35
3. 0
4. 30

total 105

3. (이름 공개 거부): 4등급(30%)
1. 50
2. 40
3. 0
4. 10

total 100

4. 강건: 4등급(40%)
1. 15
2. 35
3. 15
4. 15

total 80

5. naver yvonne3799: 5등급(50%)
1. 35
2. 0
3. 0
4. 10

total 45

6. H Star: 5등급 (60%)
1. 5
2. 15
3. 0
4. 10

total 30

7. naver dollmon14: 6등급 (70%)
1. 0
2. 5
3. 0
4. 25

total 30

8. naver wlzla000: 7등급 (80%)
1. 0
2. 15
3. 0
4. 10

total 25

9. SecondMk: 8등급 (90%)
1. 5
2. 0
3. 0
4. 10

total 15

10. naver yclee2001: 9등급 (100%)
1. 0
2. 5
3. 0
4. 0

total 5

behind story. 놀먹 회원인 '플래시신(kipa00)'님이 이 문제를 출제하셨습니다. 이 분이 말씀하시길 시간 안에 135점을 맞은 중3이 있었으나, 문제 최초 열람이 12월 11일이어서 너무 늦어 등급에 넣지 못하셨다고 합니다.

관계자를 제외한 응시인원이 4명 미만이라 모집하지 않기로 했습니다. C언어 영역에서 좋은 결과 있길 바랍니다!

놀먹 C언어 능력 시험 문제

모양이 다릅니다. 제대로 된 모양으로 보시려면 이곳으로 이동해주세요.

2013학년도 12월 놀먹 C언어 능력시험 문제지
C언어 영역

1. 다음 중 입출력 방향이 가장 다른 함수는? [2점]
① printf
② scanf
③ puts
④ fprintf
⑤ putchar

2. 16진수 0x1234를 10진수로 표현한 값은? [2점]
① 1234
② 2947
③ 4660
④ 6762
⑤ 11064

3. 다음 중 존재하지 않는 특수 문자(escape sequence)는? [2점]
① \c
② \\
③ \v
④ \r
⑤ \'

4. sizeof("String") + sizeof('\n')의 값은? [3점]
① 7
② 8
③ 9
④ 10
⑤ 11

5. 다음 소스의 입력한 값이 2일 때 출력한 값은? [3점]
int x;
scanf("%d", &x);
printf("%d\n", x^x);

① 0
② 1
③ 2
④ 3
⑤ 4

6. a = 20일 때, 8 + a >> 2의 값은? [3점]
① 7
② 9
③ 11
④ 13
⑤ 15

7. 주어진 a, b 값에 따른 다음 소스의 출력 값이 다른 하나는? (단, double의 유효 자리는 10진법 소수 12자리까지이다) [3점]
int a, b;
double c;
scanf("%d %d", &a, &b);
c = a / b;
printf("%lf\n", c);

① a=2, b=1
② a=4, b=3
③ a=6, b=5
④ a=8, b=7
⑤ a=10, b=9

8. 주어진 입력 값에 따른 출력 값이 다른 하나를 고르시오. (단, sizeof(int) = 4이다.) [3점]
int a;
scanf("%d", &a);
printf("%d", (a >> 31));

① -3
② 0
③ 1
④ 3
⑤ 16

9. 010 - 2의 값은? [3점]
① 0
② 2
③ 4
④ 6
⑤ 8

10. 주어진 입력 값에 따른 출력 값이 다른 하나를 고르시오. [3점]
#include <stdio.h>

int main(void) {
    int n;

    scanf("%d", &n);

    if (n % 3 == 0) printf("+");
    else if (n % 4 == 0) printf("-");
    else printf("%d", n);

    return 0;
}

① 3
② 8
③ 21
④ 54
⑤ 84

11. 주어진 입력 값에 따른 두 소스의 출력 값이 다른 하나를 고르시오. [3점]
int n;
scanf("%d", &n);
if (n % 6 == 1) printf("OK");
int n;
scanf("%d", &n);
if (n % 7 == 1) printf("OK");

① 43
② 127
③ 169
④ 253
⑤ 378

12. nolmuck(999)의 값은? [3점]
int nolmuck(int n) {
    int result;

    result = n / 100;
    result += (n % 100) / 10;
    result += n % 10;

    return result;
}

① 9
② 10
③ 27
④ 81
⑤ 90

[13~14] 아래의 소스에 대하여 13번과 14번의 두 물음에 답하시오.
int i, n, result = 1;

scanf("%d", &n);
for (i=1; i<=n; i++) result *= i;

13. (result % 10)의 결과가 다른 n의 값은? [3점]
① 4
② 5
③ 6
④ 7
⑤ 8

14. (result % 100)의 값이 (n^n)의 값과 같아지는 최소의 n의 값은? [4점]
① 1
② 2
③ 4
④ 5
⑤ 10

15. 다음 중, 반복의 횟수가 다른 하나는? [4점]
① for (i=0; i<10; i++);
② for (i=1; i<=10; i++);
③ for (i=20; i>0; i-=2);
④ for (i=0; i<=10; i++);
⑤ for (i=10; i>=1; i--);

16. 아래의 소스에 대하여 올바른 설명만을 <보기>에서 있는 대로 고른 것은? [4점]
int array[7] = {78, 79, 76, 77, 85, 67, 75};
int i;
for (i=0; i<7; i++)
    printf("%c", array[i]);


ㄱ. 출력 결과는 "NOLMUCK"이다.
ㄴ. array[2]의 값과 sizeof(array[5]) * 19의 값은 같다.
ㄷ. array[7]의 값은 75이다.

① ㄱ
② ㄷ
③ ㄱ, ㄴ
④ ㄴ, ㄷ
⑤ ㄱ, ㄴ, ㄷ

17. <보기>는 Ellipse 함수에 대한 설명이다. Ellipse 함수를 사용하여 다음과 같은 모양의 두 타원(동심원)을 그리는 소스로 가장 적절한 것은? [4점]

void Ellipse(int, int, int, int);
Ellipse 함수는 타원을 그리는 함수이다.

첫 번째 인수는 그려지는 타원의 경계 사각형의 왼쪽 위 모서리의 X 좌표이며,
두 번째 인수는 그려지는 타원의 경계 사각형의 왼쪽 위 모서리의 Y 좌표이며,
세 번째 인수는 그려지는 타원의 경계 사각형의 오른쪽 아래 모서리의 X 좌표이며,
네 번째 인수는 그려지는 타원의 경계 사각형의 오른쪽 아래 모서리의 Y 좌표이다.

사용 예) Ellipse(100, 100, 200, 200);

① Ellipse(100, 100, 200, 200); Ellipse(125, 125, 175, 175);
② Ellipse(100, 100, 200, 200); Ellipse(150, 150, 250, 250);
③ Ellipse(150, 150, 200, 200); Ellipse(100, 100, 150, 150);
④ Ellipse(100, 150, 150, 200); Ellipse(150, 100, 200, 200);
⑤ Ellipse(100, 150, 200, 200); Ellipse(100, 150, 150, 200);

18. secondmk 함수가 다음과 같을 때, 다음 중 가장 큰 값은? [4점]
int secondmk(int a, int b, int c) {
    int result = (a > b) ? a : b;
    result = (result > c) ? result : c;
    return result;
}

① secondmk(10, 20, 30);
② secondmk(15, 25, 35);
③ secondmk(35, 15, 25);
④ secondmk(50, 50, 50);
⑤ secondmk(12, 34, 56);

19. 항상 옳은 것만을 <보기>에서 있는 대로 고른 것은? [4점]
ㄱ. 임의의 양의 정수 a, n에 대하여 (a & n) <= a이다.
ㄴ. 임의의 양의 정수 a, n에 대하여 (a | n) >= a이다.
ㄷ. 임의의 양의 정수 a, n에 대하여 (a & n) <= (a | n) <= a + n이다.

① ㄱ
② ㄷ
③ ㄱ, ㄴ
④ ㄴ, ㄷ
⑤ ㄱ, ㄴ, ㄷ

20. 다음은 1부터 1 이상의 입력받은 수까지의 합을 출력하는 소스의 일부이다.
int n, i;
int sum = (가);
scanf("%d", &n);
for (i=(나); i<=n; i++) sum += i;
printf("%d", sum);

위의 (가)에 알맞은 양의 정수를 f, (나)에 알맞은 양의 정수를 g라 할 때, (11 * f + 12 * g)의 값은? (단, f와 g는 100,000 미만의 수이다.) [4점]
① 11
② 12
③ 24
④ 33
⑤ 35

21. 항상 옳은 것만을 <보기>에서 있는 대로 고른 것은? [4점]
ㄱ. 임의의 양의 정수 a에 대하여 a ^ 0 == a이다.
ㄴ. 임의의 양의 정수 a, b에 대하여 a ^ b == b ^ a이다.
ㄷ. 임의의 양의 정수 a, b, c에 대하여 a ^ (b ^ c) == (a ^ b) ^ c이다.
① ㄱ
② ㄴ
③ ㄱ, ㄷ
④ ㄴ, ㄷ
⑤ ㄱ, ㄴ, ㄷ

22. (5 ^ k) * 4 + (8 % 2)의 값이 0이 되는 k의 값은? [3점]

23. 임의의 양의 정수 a에 대하여, (a & (b - 5)) ^ a와 a | (b2-2b-15)의 값을 같게 하는 양의 정수 b는? [3점]

24. 다음 소스는 10개의 값을 입력받아, 입력받은 값들의 합을 출력하는 소수의 일부이다. 이때, (A)에 알맞은 임의의 정수를 p, (B)에 알맞은 임의의 정수를 q라고 할 때, q - p의 값을 구하시오. [3점]
int input;
int sum = 0, i;
for (i=(A); i<(B); i++) {
    scanf("%d", &input);
    sum += input;
}
printf("sum: %d", sum);

25. 아래의 소스를 실행하였을 때에, 최종적으로 화면에 보이는 문자의 개수를 구하시오. (공백 포함) [3점]
printf("Hello, world!\rHello\0 World!");

26. 다음은 보기의 지문을 참고하여 만든, 연도를 입력받아 윤년을 판별하는 코드의 일부이다. 이때, (A), (B), (C)에 알맞은 양의 정수를 각각 p, q, r이라고 할 때, p+q+r의 값은? [4점]

<보기> 윤년(閏年)은 역법을 실제 태양년에 맞추기 위해 여분의 하루 또는 월(月)을 끼우는 해이다. 태양년은 정수의 하루로 나누어 떨어지지 않고, 달의 공전주기와 지구의 공전주기는 다르기 때문에 태양력에서는 하루(윤일), 태음태양력에서는 한 달(윤달)을 적절한 시기에 끼워서 이를 보정한다.

태양력에서는 보통 윤일이 들어 있는 해를 말하는데, 이 경우 1년은 366일이 되며 이것이 바로 윤년이다. 지구가 태양을 한 바퀴 도는 데에는 365일 5시간 48분 46초가 걸리므로 365일을 제외한 시간들을 모아 태양력에서는 4년마다 한 번 2월 29일을 두어 하루를 늘리고, 태음력에서는 평년이 354일이므로 계절과 역월(曆月)을 조절하기 위하여 19년에 7번의 비율로 윤달을 끼워 1년을 13개월로 한다.[1] 윤년이 아닌 해는 평년이라고 한다.
.... (생략) ...
현재 전세계 대부분의 나라에서 쓰는 그레고리력은 4년에 반드시 하루씩 윤날(2월 29일)을 추가하는 율리우스력을 보완한 것으로, 태양년과의 편차를 줄이기 위해 율리우스력의 400년에서 3일(세 번의 윤년)을 뺐다.

그레고리력의 정확한 윤년 규칙은 다음과 같다.
서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다.(2004년, 2008년, 2012년…)
이 중에서 100으로 나누어 떨어지는 해는 평년으로 한다.(2100년, 2200년, 2300년…)
그 중에 400으로 나누어 떨어지는 해는 윤년으로 둔다.(1600년, 2000년, 2400년 …)
즉, 400년에 97년은 윤년이 되며, 1년은 평균 365.2425일이 된다. 이는 춘분점을 기준으로 한 태양년보다 0.0003일(26초)이 길기 때문에, 약 3,300년마다 1일의 편차가 난다. (출처 : 위키백과)

int year;
printf("연도 입력: ");
scanf("%d",&year);

if(year%(A)==0) {
 if(year%(B)==0) {
  if(year%(C)==0) printf("윤년");
  else printf("평년");
 } else {
  printf("윤년");
 }
} else {
 printf("평년");
}

27. 다음은 달(月)을 입력받아 그 달의 날 수를 출력하는 소스의 일부이다. (A), (B), (C)에 알맞은 양의 정수를 각각 p, q, r이라 할 때, p+q+r의 값을 구하세요. (단, 윤년 처리는 무시하고 모두 평년으로 처리합니다.) [4점]

int month;

scanf("%d", &month);
switch(month) {
    case 2: printf("%d", (A)); break;
    case 1: case 3: case 5: case 7: case 8: case (B): case 12: printf("31"); break;
    case 4: case 6: case 9: case 11: printf("%d", (C)); break;
}

28. 다음은 임의의 정수를 입력받아, 그 정수의 약수를 출력하는 소스의 일부이다. 이 때, (A)와 (B)에 알맞은 양의 정수를 각각 p, q라 할 때, (p ^ q) | (p & q)의 값을 구하시오. [4점]

int input, i;
scanf("%d", &input); /* 1 이상의 정수를 입력 받는다. */

printf("1 ");
for (i=(A); i<=input; i++) {
    if (input % i == (B)) printf("%d ", i);
}

29. 50 미만의 임의의 양의 정수 a, b에 대하여 a | b = a + b를 만족하는 (a, b)의 순서쌍의 개수를 구하시오. [4점]

30. 1, 1, 2, 3, 5, 8, 13, 21, ... 과 같이 나열되는 수가 있다. 이때, 14930352는 몇 번째 수인지 구하세요. [4점]

2013년 12월 8일 일요일

제 1회 수학 능력 시험 답

다음은 200점을 받는 풀이입니다.

1. 답 5점, 답이 틀리면 점수 없음.
  

2. 맞는 풀이 10점, 논리적 오류 5점 감점.
에서
  
이므로 성립.
임의의 자연수 에 대해
  
이 성립한다고 가정하면, 에서
  
이 성립한다. 따라서 준 식은 모든 자연수 에 대해 성립한다. QED

3. gcd(a, b) = gcd(b, a+b) 증명 10점, 포함 풀이 15점, 논리적 오류 5점 감점.
어떤 정수 가 있어 그 최대공약수를 라 하면,
  
이고 a/G, b/G는 정수이다.
그런데
  
에서 (a/G + b/G)가 정수이므로 는 공약수 를 갖는다.
이제 이 둘의 최대공약수를 이라 하면 의 배수이다. 그런데
  
에서 의 공약수이므로 의 배수이다.
의 배수이고 의 배수이면서 두 수 다 0보다 크므로
따라서 을 만족한다.
모든 자연수 에 대해서
그런데 이므로 준 명제는 성립한다. QED

4 (1). 수렴 증명 5점, 풀이 과정 5점, 답 5점(황금비도 정답으로 인정).
모든 에 대해
  
이 성립하므로 준 식은 수렴한다. 다음
  
이 성립하므로, 에서
  
인데 이므로
  

4 (2). 풀이 25점, 논리적 오류 5점 감점, 답 10점.
이곳 참조. 제 설명보다 잘 쓰여 있는 것 같네요.

5. 답 10점, 풀이 20점, 금지된 풀이 25점 감점, 논리적 오류 5점 감점.

(그림 참고, AE = DE = AD)
∠DAE = 60°이므로 ∠BAE = 80°
AE = AD = BC, AB는 공통,
∠BAE = ∠ABC이므로
△BAE ≡ △ABC(SAS 합동)
따라서 △BAE도 이등변삼각형,
BA = BE
△DAE는 정삼각형이므로
DA = DE
BD는 공통
따라서 △BAD ≡ △BED
(SSS 합동)
그런데 △BAE ≡ △ABC에서
∠BAC = ∠ABE이므로
∠ABE = 20°,
△BAD ≡ △BED에서
∠ABD = ∠EBD인데
∠ABE = ∠ABD + ∠EBD
= 2∠ABD = 20°이므로
∠ABD = 10°
따라서 ∠DBC = ∠ABC - ∠ABD
= 80° - 10° = 70°

6. 답 15점, 풀이 25점, 금지된 풀이 35점 감점, 논리적 오류 5점 감점.
Note) sin x의 미분을 사용하신 경우, sin x의 미분을 준 식이 1이라는 것에서 유도하기 때문에 "논리적 오류"로 판단하여 5점 감점됩니다. 로피탈의 법칙은 35점 감점이고, 매클로린 급수, 미분의 정의 등등 5점 감점입니다.
OA = \(r\), 각 AOB를 \(\theta\)라고 하면 AB는   \[2r\sin\frac{\theta}{2}\] 이다. 이러한 조각이   \[\frac{2\pi}{\theta}\] 개 있으면 각 AB의 길이의 합은 \(\theta\)가 +0에 수렴할수록 원의 둘레에 가까워진다. 따라서 이렇게 쓸 수 있다. \[\lim_{\theta\rightarrow +0}\left({\frac{2\pi}{\theta}\cdot2r\sin{\frac{\theta}{2}}} \right )=2\pi r\\ 2\pi r\lim_{\theta\rightarrow +0}\left({\frac{2}{\theta}\sin{\frac{\theta}{2}}} \right )=2\pi r\\ \therefore \lim_{\theta\rightarrow +0}{\frac{\sin\frac{\theta}{2}}{\frac{\theta}{2}}}=1\] \(\frac{\theta}{2}\)에 \(x\)를 대입하면   \[\lim_{x\rightarrow +0}{\frac{\sin x}{x}}=1\] 그런데 \[\lim_{x\rightarrow -0}{\frac{\sin x}{x}}=\lim_{y\rightarrow +0}\frac{\sin (-y)}{-y}=\lim_{y\rightarrow +0}\frac{-\sin y}{-y}=1\](y = -x) 이므로 준 식은 성립한다. QED

7. 조건부 서술 5점, 관한 식으로 표현 5점, 답 5점, 논리적 오류 5점 감점.
에서 준 식은
  
에서 준 식은
  
에서 준 식은
  
따라서 이를 에 관한 식으로 맞추면
  

8. 답 25점, 답이 조건을 만족하지 못하면 25점 감점, 절댓값 사용시 5점 감점.
  

9. 답 10점, 답이 틀리면 점수 없음.
  

10. 삼각함수 합성 10점, 범위 5점, 답 5점, 논리적 오류 5점 감점.
  이므로 
의 모든 해가 의 모든 해에 포함되므로
  
범위를 확인하여 x를 구하면
  

11. 미분 15점, x가 0이 아님 15점, 답 10점, 논리적 오류 5점 감점.
안쪽 식을 미분하면
  
대입하면
  
은 존재하지 않으므로
  
따라서 양변에 자연로그를 취하고 x를 나누면
  
따라서

12. 범위 30점, 치환 30점, 답 10점, 논리적 오류 5점 감점.
Note) 근삿값을 구하는 것은 0점 처리되었습니다. 범위를 구하지 않고 치환부터 한 다음 근이 3개 존재해서 더 이상의 해를 구하지 않는 풀이는 범위를 구하지 않았다 하더라도 옳은 풀이이므로 70점 만점 처리됩니다.
로 잡고 미분하면 이는 에서
0보다 크므로 가 아닌 모든 x에서 증가함수이다.
그런데 에서 이고, 에서 이므로
해는 에 있다.
로 치환하고 준 식을 -2로 나눈 다음 상수항을 이항하면
  
방정식을 풀어 해를 구하면