- 1 -
2013 시도예선초등부문제 1. 빨간구슬, 노란구슬, 파란구슬이각각한개씩있다. 세구슬의무게의합이 70Kg 이고, 빨간구슬과노란구슬의무게의합이 40Kg 이며, 노란구슬과파란구슬의무게의합이 50Kg 일때, 노란구슬의무게는몇 Kg 인가? 1 5 2 10 3 15 4 20 5 30 2. 의마지막자리의숫자 (1 의자릿수 ) 는얼마인가? 1 0 2 1 3 2 4 3 5 5 3. 무게가서로다른구슬세개가있다. 양팔저울을사용하여가장가벼운구슬, 중간무 게의구슬, 가장무거운구슬의순서대로나열하고싶다. 양팔저울을최소몇번사용 하면항상나열할수있는가? 1 2 2 3 3 4 4 5 5 6 4. 철수와영희는점 P에서동시에출발하여달리기를한다. 철수는경로 A를따라달리고, 영희는경로 B를따라철수와같은빠르기로달린다. 변옆의수는변의길이를나타낸다. 철수가 10바퀴돌았을때영희와몇번만났는가? 단, 처음출발할때만난것은제외한다. P 15 5 B A 7 8 7 15 5 8 1 0 2 1 3 2 4 3 5 4 5. 30 명의학생들에게두문제가주어졌다. 1 번문제를푼학생이 25 명이고, 2 번문제를 푼학생이 20 명이다. 이경우, 두문제모두푼학생수의최소와최대는각각얼마인 가? 1 15, 30 2 10, 15 3 5, 15 4 5, 20 5 15, 20-2 -
6. 상자에빨간색왼쪽장갑 5개, 빨간색오른쪽장갑 5개, 노란색왼쪽장갑 3개, 노란색오른쪽장갑 3개, 흰색왼쪽장갑 2개, 흰색오른쪽장갑 2개가들어있다. 이제상자에손을넣어장갑을하나씩꺼내려한다. 단, 한번꺼낸장갑은다시상자에넣지않는다. 상자에서장갑을꺼낸후에만장갑의색을알수있다고한다. 그러면적어도몇개의장갑을꺼내야만같은색의왼쪽, 오른쪽장갑한쌍을항상꺼낼수있을까? 1 5 2 9 3 11 4 15 5 19 7. 왼손의손가락은순서대로엄지, 검지, 중지, 인지, 약지라고부른다. 철수가왼손을이용하여 1부터 100까지 100개의수를차례대로다음과같이센다. 먼저엄지부터시작하여수를세는데, 엄지는 1, 검지는 2, 중지는 3, 인지는 4, 약지는 5라고센다. 그다음방향을바꿔서인지 6, 중지 7, 검지 8, 엄지 9라고세고, 다시방향을바꿔검지 10, 중지 11,... 이런식으로센다. 그러면 100은어떤손가락일까? 1 엄지 2 검지 3 중지 4 인지 5 약지 8. 길이가 100cm 인줄자가하나있다. 이줄자를길이가 1cm 인 100 개의조각들로나누고 싶다. 여러개의줄자조각들을모아한번에자를수있다고할때, 최소몇번만자 르면가능할까? 단, 줄자는접을수없다. 1 7 2 8 3 9 4 10 5 99 9. 1 부터 100 까지모든정수의각자리에나타난수를모두더하면얼마인가? 1 899 2 900 3 901 4 902 5 903 10. 1부터시작하여, 이전의수에 2를곱하거나, 이전의수에 1을더하는연산을이용하여숫자들을차례로만든다고하자. 다음은 13을만드는두방법을보여준다. 방법1: 1 2 3 6 12 13 방법2: 1 2 4 5 6 12 13 주어진두가지연산만을이용하여 13을만드는방법은위의방법이외에도여러가지있다. 그중에서, 13을만드는최소연산횟수는위의방법1과같이 5이다. 250을만드는데필요한최소연산횟수는얼마인가? 1 8 2 9 3 10 4 11 5 12 11. 아래표에나타난 100 개의수를모두더하면얼마인가? - 3 -
1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 11 3 4 5 6 7 8 9 10 11 12 4 5 6 7 8 9 10 11 12 13 5 6 7 8 9 10 11 12 13 14 6 7 8 9 10 11 12 13 14 15 7 8 9 10 11 12 13 14 15 16 8 9 10 11 12 13 14 15 16 17 9 10 11 12 13 14 15 16 17 18 10 11 12 13 14 15 16 17 18 19 1 550 2 850 3 950 4 1000 5 1050 12. A, B, C, D, E 다섯개의문자로만이루어진메시지를주고받으려한다. 메시지를주고받기전에 A는 00, B는 01, C는 100, D는 101, E는 11로나타내었다. 예를들어, 메시지 BBD를보내려면 0101101을보내면된다. 1001010110110000이라는메시지를받았다면, 이메시지에있는문자는모두몇개인가? 1 4 2 5 3 6 4 7 5 8 13. 네명의학생갑, 을, 병, 정이 100m 달리기를하였다. 친구들이달리기결과를다음과같이예측하였다. ( 친구1) 1등 : 갑, 2등 : 을, 3등 : 병 ( 친구2) 1등 : 을, 2등 : 병, 3등 : 정 ( 친구3) 1등 : 병, 2등 : 갑, 3등 : 정경기가끝났을때, 위의친구세명은각각한명의등수만정확하게맞추었다. 또한세명의친구가맞춘등수는모두달랐다. 이때, 2등한학생은누구인가? 1 갑 2 을 3 병 4 정 5 알수없음 14. 다음과같이숫자가표시된카드 11 장이있다. 이카드들중에서여러장을뽑아서뽑 힌카드들의숫자를모두더하여하나의수를만들려고한다. 만들수없는수들중에 서가장작은수는? 1 1 2 5 7 17 17 35 83 170 340 1 89 2 129 3 169 4 339 5 449-4 -
15. 세야구팀갑, 을, 병이서로한번씩의경기를하였다. 갑은두경기에서 4 득점을하 였고, 4 실점을하였다. 을은두경기에서 4 득점을하였고, 3 실점을하였다. 병은두경기 에서 4 득점을하였고, 5 실점을하였다. 갑과병사이의경기점수로가능한것은? 1 3:2 2 2:2 3 4:2 4 2:1 5 3:1 [16-40] 문제나프로그램내에명시되지않은모든변수와배열은 int 형이다. 16. 다음프로그램의출력결과는무엇인가? int y = 2013, m = 5, d = 25; printf("%d\n", y + m * d); 1 2013 2 2018 3 2038 4 2043 5 2138 17. 다음프로그램의출력결과는무엇인가? int i, tot = 0; for (i = 2010; i <= 2013; i++) { tot = tot + 3 * (i - 2000) + 1; printf("%d\n", tot); 1 140 2 142 3 144 4 146 5 148 18. 다음프로그램의출력결과는무엇인가? int i, y = 0; for (i = 2000; i <= 2013; i++) { if (i % 400 == 0) { y++; else if (i % 4 == 0 && i % 100!= 0) { y++; printf("%d\n", y); - 5 -
1 4 2 5 3 6 4 7 5 8 19. 다음프로그램의출력결과는무엇인가? int i = 1, count = 0; while (i * i <= 150) { count++; i++; printf("%d\n", count); 1 10 2 11 3 12 4 13 5 14 20. 다음프로그램의출력결과는무엇인가? int i, sum = 0; for (i = 1; i <= 2013; i += 13) { if (i % 2 == 0) { sum = sum + 1; else { sum = sum + 2; printf("%d\n", sum); 1 155 2 156 3 232 4 233 5 310 21. 다음프로그램의출력결과는무엇인가? int sum = 0, a = 2013; while (a > 0) { sum += a % 10; a /= 10; printf("%d\n", sum); - 6 -
1 1 2 2 3 3 4 5 5 6 22. 다음프로그램의출력결과는무엇인가? int i, a = 2, b = 3, c = 5; for (i = 2 ; i < 65; i++) { if (i % a == 0 && i % b == 0 && i % c == 0) { break; printf("%d\n", i); 1 6 2 15 3 30 4 60 5 65 23. f(5) 의값은무엇인가? int f(int n) { int i, tot = 0; for (i = 1; i <= n; i++) { tot = tot + i; return tot; 1 10 2 11 3 13 4 15 5 21 24. f(10) 의값은무엇인가? int f(int n) { int i, j, ret = 0; for (i = 1; i < n; i++) { for (j = 1; j < 2 * i; j++) { ret = ret + 1; return ret; - 7 -
1 45 2 55 3 81 4 90 5 100 25. 다음프로그램의출력결과는무엇인가? int L[14] = {6, -3, 2, -7, 4, -2, 3, 10, -2, 1, -3, -4, 5, -1; int S[14], M, i; S[0] = L[0]; for (i = 1; i < 14; i++) { if(s[i - 1] > 0) { S[i] = S[i - 1] + L[i]; else { S[i] = L[i]; M = S[0]; for (i = 1; i < 14; i++) { if(m < S[i]) M = S[i]; printf("%d\n", M); 1 14 2 15 3 16 4 17 5 18 26. 배열 a 에는다음과같은값이주어진다. int a[] = {1, 37, 3, 10, 13, 23, 4, 8, 17; 아래주어진함수 SomeAverage(a, 9, 5) 를호출했을때출력결과는무엇인가? void SomeAverage(int a[], int n, int m) { int i, j, sum; for (i = 0; i <= n - m; i++) { sum = 0; for (j = i; j < i + m; j++) { sum = sum + a[j]; - 8 -
printf("%d ", sum / m); printf("\n"); 1 13 17 11 12 13 2 12 17 10 11 13 3 12 17 11 12 13 4 12 17 10 12 13 5 12.8 17.2 10.6 11.6 13 27. f(3, 4) 의값은무엇인가? int f(int x, int n) { if (n == 1) { return 1; else { return x * f(x, n - 1); 1 1 2 3 3 9 4 27 5 81 28. f(4) 의값은무엇인가? int f(int n) { if (n <= 0) { return 1; else { return f(n - 1) + f(n - 3) * 3; 1 4 2 7 3 10 4 14 5 22 29. f(10, 20) 을실행한후, count 의값은무엇인가? int count = 0; int f(int a, int b) { - 9 -
if (a == b) { count++; return a; else { int mid; mid = (a + b) / 2; return f(a, mid) + f(mid + 1, b); 1 11 2 20 3 50 4 122 5 165 30. 다음프로그램의출력결과는무엇인가? int a[15] = {0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1; void f(int n) { if (n >= 15) return; if (a[n]!= 1) return; a[n] = 2; f(n + 1); int main() { int i, g; g = 0; for (i = 0; i < 15; i++) { if (a[i] == 1) { f(i); g = g + 1; printf("%d\n", g); return 0; 1 1 2 3 3 5 4 7 5 9 31. 다음프로그램의출력결과는무엇인가? - 10 -
int a[20] = {1, 4, 3, 2, 4, 1, 2, 5, 1, 2, 3, 5, 4, 1, 2, 1, 1, 1, 1, 9; int i, s = 0, gr = 0; for (i = 0; i < 20; i++) { if (a[i] + s > 10) { gr++; s = 0; else { s = s + a[i]; if (s > 0) { s = 0; gr++; printf("%d\n", gr); 1 1 2 4 3 5 4 6 5 20 32. 다음프로그램의출력결과는무엇인가? int i, x = 2, y = 2, xx, yy; for (i = 0; i < 2013; i++) { xx = -y; yy = x; x = xx; y = yy; printf("%d %d\n", x, y); 1 2 2 2 2-2 3-2 -2 4-2 2 5 0 2 33. 다음보기중에서가장큰값은무엇인가? int next[10] = {4, 1, 9, 0, 3, 2, 6, 5, 8, 7; int f(int n) { int i, k; - 11 -
i = next[n], k = 1; while (i!= n) { i = next[i]; k = k + 1; return k; 1 f(0) 2 f(1) 3 f(2) 4 f(3) 5 f(6) 34. f(8, 5) 의값은무엇인가? int f(int n, int r) { int p[11][11]; int i, j; for (i = 0; i <= n; i++) { for (j = 0; j <= n; j++) { p[i][j] = 0; p[0][0] = 1; for (i = 0; i <= n; i++) { p[i][0] = 1; for (j = 1; j <= i; j++) { p[i][j] = p[i - 1][j - 1] + p[i - 1][j]; return p[n][r]; 1 56 2 57 3 58 4 59 5 60 35. 다음보기중에서가장큰값은무엇인가? int f(int n) { int a[10] = {0, t = 0, i; while (n > 0) { a[n % 10] = 1; n = n / 10; - 12 -
for (i = 0; i < 10; ++i) t = t + a[i] * i; return t; 1 f(999999) 2 f(711587) 3 f(614331) 4 f(843211) 5 f(914312) 36. 다음보기중에서 SomeString(str1, str2) 를호출했을때 0 을반환하는것은무엇인가? ( 단, str1, str2 는 char[] 자료형이며, 각보기는 str1, str2 를차례로나타낸다.) int SomeString(char a[], char b[]) { int i, j, n, m; n = strlen(a); m = strlen(b); if (n!= m) { return 0; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { if (a[i] == b[j]) { b[j] = '*'; break; for (i = 0; i < m; i++) { if (b[i]!= '*') { return 0; return 1; 1 2 3 4 5 "pizza" "pazzi" "listen" "silent" "competition" "emoticontip" "mississippi" "imisspsipis" "algorithm" "logtrimat" - 13 -
37. SomeNumbers() 를호출했을때출력결과는무엇인가? void SomeNumbers() { int i, j, tot; for (i = 10; i < 100; i++) { tot = 0; for (j = 1; j < i; j++) { if (i % j == 0) { tot = tot + j; if (tot == i) { printf("%d\n", i); 1 10 2 16 3 24 4 28 5 36 38. 다음프로그램의출력결과는무엇인가? int c = 0, i, j, k; char str[] = "akakakka"; int len = 8; int p; for (i = 0; i < len; i++) { for (j = i; j < len; j++) { p = 1; for (k = 0; i + k < j - k; k++) { if (str[i + k]!= str[j - k]) { p = 0; break; if (p == 1) { c = c + 1; - 14 -
printf("%d\n", c); 1 13 2 14 3 15 4 16 5 17 [39-40] 다음과같은문제를해결하기위해프로그램을작성하였다. 물음에답하시오. 0부터 9까지의숫자가표시된카드를가지고두사람 A와 B가게임을한다. A와 B에게는각각 0에서 9까지의숫자가하나씩표시된 10장의카드뭉치가주어진다. 두사람은카드를임의의순서로섞은후숫자가보이지않게일렬로늘어놓고게임을시작한다. 단, 게임도중카드의순서를바꿀수는없다. A와 B 각각이늘어놓은카드를뒤집어서표시된숫자를확인하는것을한라운드라고한다. 게임은첫번째놓인카드부터시작하여순서대로 10번의라운드로진행된다. 각라운드에서는공개된숫자가더큰사람이승자가된다. 승자에게는승점 3점이주어지고패자에게는승점이주어지지않는다. 만약공개된두숫자가같아서비기게되면, A, B 모두에게승점 1 점이주어진다. 10번의라운드가모두진행된후, 총승점이큰사람이게임의승자가된다. 만약, A와 B 의총승점이같은경우에는, 제일마지막에이긴사람을게임의승자로정한다. 그래도승부가나지않는경우는모든라운드에서비기는경우뿐이고이경우에두사람은비겼다고한다. 예를들어, 다음표에서 3번째줄은각라운드의승자를표시하고있다. 표에서 D는무승부를나타낸다. 이경우에 A의총승점은 16점이고, B는 13점이어서, A가게임의승자가된다. 라운드 1 2 3 4 5 6 7 8 9 10 A 4 5 6 7 0 1 2 3 9 8 B 1 2 3 4 5 6 7 8 9 0 승 A A A A B B B B D A 아래표의경우에는 A 와 B 의총승점은 13 점으로같다. 마지막으로승부가난라운드는 7 번째라운드이고, 이라운드의승자인 B 가게임의승자가된다. 라운드 1 2 3 4 5 6 7 8 9 10 A 9 1 7 2 6 3 0 4 8 5 B 6 3 9 2 1 0 7 4 8 5 승 A B B D A A B D D D A 와 B 가늘어놓은카드의숫자가순서대로주어질때, 게임의승자가 A 인지 B 인지, 또는 비겼는지결정하는프로그램을작성하시오. - 15 -
입력형식 입력파일의이름은 INPUT.TXT 로한다. 입력파일은두개의줄로이루어진다. 첫번째줄 에는 A 가늘어놓은카드의숫자들이빈칸을사이에두고순서대로주어진다. 두번째줄에는 B 가늘어놓은카드의숫자들이빈칸을사이에두고순서대로주어진다. 출력형식 출력파일의이름은 OUTPUT.TXT로한다. 첫번째줄에는게임이끝난후, A와 B가받은총승점을순서대로빈칸을사이에두고출력한다. 두번째줄에는이긴사람이 A인지 B인지결정해서, 이긴사람을문자 A 또는 B로출력한다. 만약비기는경우에는문자 D를출력한다. 입력과출력의예 입력 (INPUT.TXT) 7 1 6 2 3 0 5 9 4 8 7 1 6 2 3 0 5 9 4 8 출력 (OUTPUT.TXT) 10 10 D - 16 -
프로그램 #include <stdio.h> int A[10]; int B[10]; int main() { int i, j; int last_winner, A_score, B_score; FILE *fin, *fout; fin = fopen("input.txt", "rt"); for (i = 0; i < 10; i++) { fscanf(fin, "%d", &A[i]); for (i = 0; i < 10; i++) { fscanf(fin, "%d", &B[i]); fclose(fin); last_winner = -1; A_score = 0; B_score = 0; for (i = 0; i < 10; i++) { if (A[i] > B[i]) { A_score += 3, last_winner = 0; else if (A[i] < B[i]) { B_score += 3, last_winner = 1; else { A_score ++, B_score ++; fout = fopen ("OUTPUT.TXT", "wt"); fprintf(fout, "%d %d\n", A_score, B_score); if (A_score == B_score) { if ( (a) ) { fprintf(fout, "D"); - 17 -
else if ( (b) ) { fprintf(fout, "A"); else { fprintf(fout, "B"); else if (A_score > B_score) { fprintf(fout, "A"); else { fprintf(fout, "B"); fclose(fout); return 0; 39. 다음중 (a) 와 (b) 에들어갈내용으로알맞은것은? 1 (a) last_winner == 1 (b) last_winner == 0 2 (a) last_winner == -1 (b) last_winner == 0 3 (a) last_winner == -1 (b) last_winner == 1 4 (a) last_winner == 1 (b) last_winner == -1 5 (a) last_winner == 0 (b) last_winner == 1 40. 입력파일이다음과같이주어졌을때, 위프로그램의출력은무엇인가? 9 1 7 2 6 3 0 4 8 5 6 3 9 2 1 0 7 4 8 5 1 13 13 2 12 14 3 13 11 4 14 12 5 13 13 B B A A A - 18 -
- 19 -
2013 시도예선초등부정답 1. 4 2. 1 3. 2 4. 3 5. 5 6. 3 7. 4 8. 1 9. 3 10. 5 11. 4 12. 3 13. 1 14. 3 15. 1 16. 5 17. 2 18. 1 19. 3 20. 4 21. 5 22. 3 23. 4 24. 3 25. 2 26. 2 27. 4 28. 5 29. 1 30. 3 31. 2 32. 4 33. 3 34. 1 35. 2 36. 5 37. 4 38. 4 39. 2 40. 1-20 -