2010 중고등부문제 1. 1부터 2000까지의정수들중에서 4의배수혹은 6의배수로서 5의배수가아닌수는몇개인가? 2. 정육면체쌓기나무를쌓아올려만든모양을위, 앞, 오른쪽옆의세방향에서보았더니다음과같았다. 쌓기나무수의최대값과최소값의합은얼마인가? 3. 다음과같이나열된수열이있다. 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 이때 200번째수는무엇인가? 4. A, B, C, D, E 5명이다음과같이말하였다. 이들중한사람만참말을하고나머지는모두거짓말을하였다. 그러면참말을한사람은누구인가? A: D가거짓말을하고있다. B: C는참말을하고있다. C: E는참말을하고있다. D: B가거짓말을하고있다. E: A는참말을하고있다. 5. A, B, C, D, E의문자들을각각최대한번만사용하여만들수있는, 길이가 5 이하인단어들중단어 CDAB는사전식순서에서몇번째단어인가? 사전식순서에서 A가첫번째단어이고, EDCBA가마지막단어이다. 6. 30, 15, 10, 25, 5, 20을인접한두수들만교환하여 5, 10, 15, 20, 25, 30과같이크기순서대로정렬하고자한다. 최소교환횟수는얼마인가?
7. 학생수가 40명인철수네반의방과후수업으로컴퓨터활용, 홈페이지제작, 프로그래밍의세과목이있다. 이들과목들의수업시간은서로다르므로각학생들은여러과목을들을수있다. 이들과목에대하여수업을듣는학생들의수를조사하여다음과같은결과를얻었다. 홈페이지제작수업을듣는학생들수 : 20 프로그래밍수업을듣는학생들수 : 15 컴퓨터활용과홈페이지제작수업을듣는학생들수 : 10 컴퓨터활용과프로그래밍수업을듣는학생들수 : 5 홈페이지제작과프로그래밍수업을듣는학생들수 : 8 컴퓨터활용과홈페이지제작과프로그래밍세과목모두수업을듣는학생들수 : 2 방과후수업을듣지않는학생들수 : 3 컴퓨터활용수업을듣는학생들은몇명인가? 8. 정육면체의각면을서로다른 6개의색으로칠하고자한다. 정육면체를색칠하는방법은몇가지인가? 색칠하는두방법 A, B에대하여, 방법 A에의해색칠한정육면체를마음대로돌려서방법 B에의해색칠한정육면체를얻을수있으면두방법은동일한것으로간주한다. 9. 다음그림과같은 2가지종류의블록이있다. 위의블록들을여러개사용해서가로 2 칸, 세로 2 칸크기의판을채우는방법은 다음 3 가지이다. 이때, 블록들을회전해서채워넣는것도가능하다. 그렇다면, 위의 2 가지블록들을여러개사용해서가로 2 칸, 세로 6 칸크기의판을 채우는방법은모두몇가지인가?
10. 25 개의점이아래와같이놓여있다. 점선으로이은두점사이의거리가모두같다 고할때, 서로다른네개의점으로만들수있는정사각형의개수는모두몇개인가? 11. A, B, C, D 4명의사람들이가지고있는돈의총금액은 1000원이다. 이들 4명이각자가가지고있는돈에대한질문에아래와같이답하였다. A: 나는 C가가지고있는금액의두배를가지고있다. B: 나는 D보다 100원많다. C: 나는 B보다 200원많다. D: 내가가지고있는금액은제곱수이다. 위의네사람중, 가지고있는돈이 0원인한사람만거짓말을하고있을때, A와 D가가지고있는돈의합은얼마인가? 12. 키가모두다른 10명의학생들 A, B, C, D, E, F, G, H, I, J가순서대로줄을서있다 (A가가장앞에있음 ). 각자뒤에있는사람들중에서자기자신보다키가작은사람의수를세어보았더니아래표와같았다. E보다키가큰사람은몇명인가? 13. 한변의길이가 3인정육면체가있다. 아래그림과같이각면의중앙에한변의길이가 1인정사각형모양의구멍을뚫었다. 정사각형의각변은정육면체의변과평행하게놓여있다. 구멍은그면에수직한방향으로뚫기시작하여반대쪽면을만날때까지계속한다. 이렇게구멍을뚫은입체도형의겉넓이는얼마인가?
14. 아래그림과같은도로망이주어져있다. 각선분에표시된정수는그도로를지나는데걸리는시간을의미한다. 위치 A에서출발하여모든도로를한번이상지나서다시 A로돌아오는경로중가장시간이적게걸리는경로를찾아이때의시간을계산하시오. 15. 2개의노드로이루어진서로다른이진트리는 2가지가있다. 5개의노드들로이루어진서로다른이진트리는몇가지인가? <Visual C++ 사용자용문제 > 문제나프로그램내에명시되지않은변수와배열은모두 int 형이다. 16. 아래프로그램의실행결과는무엇인가?
c = 1; for (i = 3 ; i <= 10 ; i++) c++; printf("%d\n", c); 17. 아래프로그램의실행결과는무엇인가? a = 1; b = 2; c = 3; a = b * c; b = c * a; c = a * b; printf("%d\n", a + b + c); 18. 아래프로그램의실행결과는무엇인가? d[1] = 6; d[2] = 2; d[3] = 1; d[4] = 5; d[5] = 4; d[6] = 2; d[7] = 4; d[8] = 12; d[9] = 5; d[10] = 8; s = d[1]; n1 = d[1]; n2 = d[1]; for (i = 2 ; i <= 10 ; i++) { s = s + d[i]; if (d[i] > n1) n1 = d[i]; if (d[i] < n2) n2 = d[i]; printf("%d\n", (s - n1 - n2) / 8); 19. 아래프로그램의실행결과는무엇인가? int a[5]; a[0] = 1; a[1] = 3; a[2] = 4; a[3] = 0; a[4] = 2; for (i = 0 ; i <= 4 ; i++) { t = i; for (j = 1 ; j <= 2010 ; j++)
t = a[t]; printf("%d ", t); printf("\n"); 1 0 1 2 3 4 2 1 3 2 0 4 3 1 3 4 0 2 4 3 0 2 1 4 5 3 0 4 1 2 20. 아래프로그램의실행결과는무엇인가? int a[5], b[5]; int i, j, s; s = 0; for (i = 0 ; i <= 4 ; i++) { a[i] = i + 1; b[i] = a[i] * a[i]; for (i = 0 ; i <= 4 ; i++) { for (j = 0 ; j <= 4 ; j++) s = s + a[i] * b[j]; printf("%d\n", s); 21. 아래와같은함수 f 가있을때, f(3, 15, 10) 의값은무엇인가? int f(int n, int k, int m) { int a; a = 1; while (k > 0) { if (k % 2 == 1) { a = (a * n) % m; n = (n * n) % m; k = k / 2; return a;
22. 배열 c 의각원소에임의의정수가저장되어있을때, 아래의부분을실행시킨다 음 s 가가질수있는최대값은? a = 0; b = 0; s = 0; while (a >= 0 && a <= 30 && b >= 0 && b <= 30) { if (c[a][b] > 0) { a = a + 2; b = b + 1; s++; else { a = a - 1; b = b - 2; s++; [23-24] 아래와같은함수 f 가있다고하자. int f(int a, int b) { if (a <= 0) return b; else return f(a - 1, b * 2) + b; 23. f(8, 2) 의값은무엇인가? 24. 함수 f 를재귀호출 (recursive call) 을사용하지않도록다음과같이수정하였다. int f(int a, int b) { int sum; sum = ; while (a > 0) { a--;
sum = sum + ; b = b * 2; return sum; ᄀ, ᄂ에들어갈내용으로각각알맞은것은? 1 ᄀ : 0 2 ᄀ : 0 3 ᄀ : b ᄂ : b ᄂ : b * 2 ᄂ : b 4 ᄀ : b 5 ᄀ : b * 2 ᄂ : b * 2 ᄂ : b * 2 [25-26] 아래와같은프로그램이있다고하자. int www(int a[], int low, int high) { int mid, sum; int i; if (low == high - 1) return a[low]; sum = 0; for (i = low ; i <= high - 1 ; i++) sum = sum + a[i]; (a) mid = (low + high) / 2; return www(a, low, mid) + www(a, mid, high) + sum; int main() { int value[16]; int size; int i; size = 16; for (i = 0 ; i <= size - 1 ; i++) value[i] = i;
printf("%d\n", www(value, 0, size)); return 0; 25. 위프로그램의실행결과는무엇인가? 26. 프로그램에서밑줄친 (a) 문장이실행되는횟수는? 27. 직사각형모양의색종이두장이책상위에놓여있다. 두색종이의크기는서로다를수있고, 색종이의각변은책상의모서리와평행하게놓여있다. 아래그림과같이책상의모서리를 x축과 y축으로놓고좌표평면을만들면색종이의왼쪽아래좌표와색종이의오른쪽위좌표로하나의색종이의위치를표현할수있다. 첫번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x1, y1), (x2, y2) 로주어지고, 두번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x3, y3), (x4, y4) 로주어진다. 모든좌표값은정수라고가정한다. 이때두색종이가겹치는부분의면적을계산하는함수 area를아래와같이작성하였다. int max(int a, int b) { if (a > b) return a; else return b; int min(int a, int b) { if (a < b)
return a; else return b; int pos(int x) { if (x >= 0) return x; else return 0; int area(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) { return ; 빈칸에들어갈내용으로알맞은것은? 28. 배열 a 에다음과같이값들이저장되어있다고하자. 이때, 아래프로그램의실행결과는무엇인가? for (i = 0 ; i <= 9 ; i++) { for (j = 0 ; j <= 9 ; j++) { if (a[i] > a[j]) { t = a[i]; a[i] = a[j]; a[j] = t;
printf("%d\n", a[2]); 29. 아래와같은함수 f 가있을때, f(3, 3) 의값은무엇인가? int f(int m, int n) { if (m == 0) return n + 1; else if (n == 0) return f(m - 1, 1); else return f(m - 1, f(m, n - 1)); 30. 배열 a에 a[1] 부터 a[9] 까지임의의 9개의정수가들어가있을때, 그중간값을구하여출력하는프로그램을아래와같이작성하였다. 단, 중간값은배열 a의원소들을크기순서대로정렬하였을때 a[5] 에저장되는값을의미한다. for (i = 1 ; i <= 9 ; i++) { c1 = 0; c2 = 0; for (j = 1 ; j <= 9 ; j++) { if (a[j] ᄀ a[i]) c1++; if (a[j] ᄂ a[i]) c2++; if (c1 >= ᄃ && c2 >= ᄅ ) { mid = a[i]; break; printf("%d\n", mid); 면? 다음의보기에서ᄀ ~ ᄅ에들어갈수있는내용이알맞게짝지어진것을모두고르
가. ᄀ < ᄂ > ᄃ 4 ᄅ 4 나. ᄀ < ᄂ >= ᄃ 4 ᄅ 5 다. ᄀ <= ᄂ > ᄃ 5 ᄅ 4 라. ᄀ <= ᄂ >= ᄃ 5 ᄅ 5 1 가 2 라 3 나, 다 4 나, 다, 라 5 가, 나, 다, 라 [31-33] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 지질탐사의결과지하깊숙이묻힌금강석정보를나타내는지도가아래그림처럼만들어졌다. 그림에서굵은점은금강석이위치한곳을나타낸다. 이제땅을파서금강석을캐려고한다. 굴착할영역은항상두대각선이좌표축에평행한정사각형모양이다. 앞으로이사각형을 D-사각형이라고부르자. 현재보유하고있는예산과굴착기술로는대각선의길이가 K인 D-사각형영역을단한번만팔수있다. 그래서굴착할 D-사각형영역에가장많은금강석이포함될수있도록하려고한다. 지도에서가장왼쪽아래의점을좌표축의원점 (0, 0) 이라고하자. 각금강석은정수좌표에위치한다. D-사각형의중심, 즉, 두대각선이만나는점은반드시지도 ( 경계선포함 ) 위에놓여야한다. D-사각형변에놓인금강석도이사각형에포함된것으로본다. 예를들어, 아래그림에서 K=4인경우왼쪽 D-사각형은 5개의금강석을, 오른쪽 D-사각형은 3개의금강석을포함한다. 지질탐사지도에대한정보를입력받아가장많은금강석을포함하는 D- 사각형을구하 는프로그램을작성하라.
입력형식 입력파일의이름은 INPUT.TXT로한다. 첫째줄에 4개의정수 N, M, T, K가빈칸을사이에두고주어진다. N은지도의너비를나타내고, M은지도의높이를나타낸다 (1 N, M 5,000). T는금강석의개수를나타내고, K는 D-사각형의크기 ( 대각선의길이 ) 를나타낸다, T는 1 이상 100 이하의정수이고, K는 2 이상 1,000 이하의정수이다. 둘째줄부터 T개의줄에는각줄마다두개의정수 A와 B가빈칸을사이에두고주어진다. 여기서 (A, B) 는금강석이위치한곳의좌표이다 (0 A N, 0 B M). 입력으로주어진금강석의좌표들은모두다르다. 출력형식 출력파일의이름은 OUTPUT.TXT로한다. 첫째줄에 D-사각형의중심의좌표 (X, Y) 를나타내는두개의실수 X, Y를빈칸을사이에두고출력한다. 둘째줄에는이 D-사각형에포함되는금강석의개수를출력한다. 답이여러개있는경우에는그중하나만출력하라. 입력과출력의예 입력 (INPUT.TXT) 10 8 9 4 2 2 3 4 9 3 9 5 8 2 4 5 4 3 5 3 6 4 출력 (OUTPUT.TXT) 5.0 4.0 5
프로그램 #include <stdio.h> int n, m, t, k; int a[100], b[100]; int ans, cx, cy; int f(int x) { if (x >= 0) return x; else return -x; void check(int x, int y) { int cnt, i; cnt = 0; for (i = 0 ; i <= t - 1 ; i++) if ( ) cnt++; if (cnt > ans) { ans = cnt; cx = x; cy = y; int main() { int i, j; int tx, ty; int diff; FILE* fin = fopen("input.txt", "r"); fscanf(fin, "%d %d %d %d", &n, &m, &t, &k);
n = n * 2; m = m * 2; k = k * 2; for (i = 0 ; i <= t - 1 ; i++) { fscanf(fin, "%d %d", &a[i], &b[i]); a[i] = a[i] * 2; b[i] = b[i] * 2; fclose(fin); ans = 0; for (i = 0 ; i <= t - 1 ; i++) for (j = 0 ; j <= t - 1 ; j++) { diff = ; tx = a[i] + diff / 2; ty = b[i] + diff / 2; check(tx - k / 2, ty); check(tx + k / 2, ty); check(tx, ty - k / 2); check(tx, ty + k / 2); (a) (b) (c) (d) if (cx < 0) cx = 0; if (cx > n) cx = n; if (cy < 0) cy = 0; if (cy > m) cy = m; FILE* fout = fopen("output.txt", "w"); fprintf(fout, "%f %f\n", (float)cx / 2, (float)cy / 2); fprintf(fout, "%d\n", ans); fclose(fout); return 0; 31. ᄀ에들어갈내용은무엇인가?
32. ᄂ에들어갈내용은무엇인가? 33. 프로그램에서밑줄친부분을다음과같이수정하려고한다. if (diff >= 0) { if (diff <= 0) { (a)~(d) 의각문장이들어가야할위치를알맞게짝지은것은? 1 ( 가 ) : (a), (b) 2 ( 가 ) : (a), (c) 3 ( 가 ) : (b), (c) ( 나 ) : (c), (d) ( 나 ) : (b), (d) ( 나 ) : (a), (d) 4 ( 가 ) : (b), (d) 5 ( 가 ) : (c), (d) ( 나 ) : (a), (c) ( 나 ) : (a), (b) [34-35] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 유시섬에서한가롭게소풍을즐기던다리오와오렌지공주. 다리오가잠시자리를비운 사이에못된악당후퍼가공주를데리고도망가버렸다. 다리오는후퍼가오렌지공주를숨 겨놓은후퍼섬으로여행을떠난다.
유시 후퍼 유시섬에서후퍼섬까지가기위해서는중간에있는여러개의섬을거쳐가야한다. 유시섬과후퍼섬을포함한모든섬들은유시섬과후퍼섬을지나는직선상에있다. 위그림에서, 섬들을나타내는동그라미아래에있는눈금자가각각의섬이유시섬과몇 km나떨어져있는지를나타낸다. 가장왼쪽에있는섬이유시섬이고, 가장멀리있는후퍼섬은 15km 떨어져있다. 한섬에서다른섬으로건너가기위해서는섬마다하나씩있는스프링발판을밟아점프해야한다. 이스프링발판은내구성이약해서한번사용하면부서져버린다. 이때문에, 시작점인유시섬을제외한모든섬들은두번이상방문하면안된다. 스프링발판들의스프링의세기는모두다르다. 섬을나타내는동그라미에쓰여있는숫자는스프링발판을딛고점프했을때가장멀리도달할수있는거리를나타낸다. 가령, 유시섬에서 7km 떨어져있는섬의스프링발판의세기가 3이라면, 스프링발판을딛고도달할수있는섬은유시섬에서 4km 이상 10km 이하떨어져있는섬들이다. 다리오는공주를구하기위해앞만보고질주한다. 공주를구하기전에는스프링발판을밟고후퍼섬을향해서만점프한다. 하지만공주를구한뒤에는공주를들쳐업고유시섬을향해서만뒤도돌아보지않고도망친다. 일부스프링발판은내구도가너무약해서공주를들쳐업은상태에서는발만딛어도부서져버리기도한다. 그림에서유시섬에서 12km 떨어진곳에있는회색으로표시된섬의스프링발판이그예이다. 이런스프링발판들은공주를구하러후퍼섬을향해갈때에만사용할수있다. 유시섬과후퍼섬을포함한모든섬들의정보와섬마다하나씩있는스프링발판의정보가주어질때, 다리오가유시섬을출발해공주를구하고돌아오는서로다른경로의개수를 1000으로나눈나머지를출력하는프로그램을작성하시오. 입력형식 입력파일의이름은 INPUT.TXT로한다. 첫째줄에는섬의개수 N이주어진다. N은유시섬과후퍼섬도포함한개수이고 3 이상 500 이하이다. 이어지는 N개의줄에는각각의섬에대한정보가한줄에하나씩주어진다. 섬의정보는유시섬과의거리가가까운순으로주어진다. 그러므로첫번째로정보가주어지는섬은항상유시섬이고, 마지막으로정보가주어지는섬은항상후퍼섬이다.
섬의정보를나타내는각각의줄에는섬에대한정보를표현하는세개의정수가빈칸을사이에두고주어진다. 첫번째정수는유시섬과의거리이다. 유시섬에대해서는이값이 0이고, 후퍼섬에서이값이가장크다. 거리는 0 이상 10,000 이하이다. 이값이동일한두섬은존재하지않는다. 두번째정수는스프링발판의세기, 즉해당섬에서좌우로얼마나떨어진섬까지점프할수있는지를나타내는값이다. 이값은 1 이상 1,000 이하이다. 세번째정수는해당섬의스프링발판을오렌지공주를들쳐업은상태에서도사용할수있는지를나타내는값이다. 1이면오렌지공주와함께이용할수있고, 0이면이용할수없다. 후퍼섬에서이값은항상 1이다. 출력형식 출력파일의이름은 OUTPUT.TXT 로한다. 첫째줄에유시섬에서출발해오렌지공주를 구해오는총경로의수를 1,000 으로나눈나머지를출력한다. 입력과출력의예 입력 (INPUT.TXT) 8 0 7 1 3 4 1 6 8 1 8 6 1 12 2 0 13 2 1 14 2 1 15 7 1 출력 (OUTPUT.TXT) 6 프로그램 #include <stdio.h>
int main() { int pos[501], spring[501], avail[501]; int d[500][500]; int n; int i, j, k; int ret; FILE* fin = fopen("input.txt", "r"); fscanf(fin, "%d", &n); for (i = 1 ; i <= n ; i++) fscanf(fin, "%d %d %d", &pos[i], &spring[i], &avail[i]); fclose(fin); for (i = 1 ; i <= n - 1 ; i++) for (j = 1 ; j <= n - 1 ; j++) d[i][j] = 0; d[1][1] = 1; for (i = 2 ; i <= n - 1 ; i++) { for (j = 1 ; j <= ; j++) for (k = 1 ; k <= ; k++) { if (pos[k] + spring[k] >= pos[i]) { d[i][j] = (d[i][j] + d[k][j]) % 1000; if (avail[i] == 1) { for (j = 1 ; j <= ; j++) for (k = 1 ; k <= ; k++) { if (pos[k] >= pos[i] - spring[i]) { d[j][i] = (d[j][i] + d[j][k]) % 1000; ret = 0; for (i = 1 ; i <= n - 1 ; i++) for (j = 1 ; j <= n - 1 ; j++) if (pos[i] + spring[i] >= pos[n] &&
pos[j] >= pos[n] - spring[n]) { ret = (ret + ) % 1000; FILE* fout = fopen("output.txt", "w"); fprintf(fout, "%d\n", ret); fclose(fout); return 0; 34. ᄀ, ᄂ에들어갈내용은각각무엇인가? 1 ᄀ : i - 1 2 ᄀ : i - 1 3 ᄀ : i - 1 ᄂ : i - 1 ᄂ : j - 1 ᄂ : n - 1 4 ᄀ : n - 1 5 ᄀ : n - 1 ᄂ : i - 1 ᄂ : n - 1 35. ᄃ에들어갈내용은무엇인가? 1 d[i][j] 2 d[j][i] 3 d[1][i] * d[1][j] 4 d[1][i] * d[j][1] 5 d[i][1] * d[1][j] <Visual Basic 사용자용문제 > 문제나프로그램내에명시되지않은변수와배열은모두 Integer 형이다. 16. 아래프로그램의실행결과는무엇인가? c = 1 For i = 3 To 10 c = c + 1 Next i Debug.Print c 17. 아래프로그램의실행결과는무엇인가?
a = 1: b = 2: c = 3 a = b * c b = c * a c = a * b Debug.Print a + b + c 18. 아래프로그램의실행결과는무엇인가? d(1) = 6: d(2) = 2: d(3) = 1: d(4) = 5: d(5) = 4 d(6) = 2: d(7) = 4: d(8) = 12: d(9) = 5: d(10) = 8 s = d(1) n1 = d(1) n2 = d(1) For i = 2 To 10 s = s + d(i) If d(i) > n1 Then n1 = d(i) If d(i) < n2 Then n2 = d(i) Next i Debug.Print Int((s - n1 - n2) / 8) 19. 아래프로그램의실행결과는무엇인가? Dim a(5) As Integer a(0) = 1: a(1) = 3: a(2) = 4: a(3) = 0: a(4) = 2 For i = 0 To 4 t = i For j = 1 To 2010 t = a(t) Next j Debug.Print t; Next i 1 0 1 2 3 4 2 1 3 2 0 4 3 1 3 4 0 2 4 3 0 2 1 4 5 3 0 4 1 2
20. 아래프로그램의실행결과는무엇인가? Dim a(5) As Integer, b(5) As Integer Dim i As Integer, j As Integer, s As Integer s = 0 For i = 0 To 4 a(i) = i + 1 b(i) = a(i) * a(i) Next i For i = 0 To 4 For j = 0 To 4 s = s + a(i) * b(j) Next j Next i Debug.Print s 21. 아래와같은함수 f 가있을때, f(3, 15, 10) 의값은무엇인가? Function f(n As Integer, k As Integer, m As Integer) As Integer Dim a As Integer a = 1 While k > 0 If k Mod 2 = 1 Then a = (a * n) Mod m n = (n * n) Mod m k = Int(k / 2) Wend f = a End Function 22. 배열 c 의각원소에임의의정수가저장되어있을때, 아래의부분을실행시킨다 음 s 가가질수있는최대값은? a = 0: b = 0: s = 0 While a >= 0 And a <= 30 And b >= 0 And b <= 30 If c(a, b) > 0 Then
a = a + 2 b = b + 1 s = s + 1 Else a = a - 1 b = b - 2 s = s + 1 Wend [23-24] 아래와같은함수 f 가있다고하자. Function f(a As Integer, b As Integer) As Integer If a <= 0 Then f = b Else f = f(a - 1, b * 2) + b End Function 23. f(8, 2) 의값은무엇인가? 24. 함수 f 를재귀호출 (recursive call) 을사용하지않도록다음과같이수정하였다. Function f(a As Integer, b As Integer) As Integer Dim sum As Integer sum = While a > 0 a = a - 1 sum = sum + b = b * 2 Wend f = sum End Function ᄀ, ᄂ에들어갈내용으로각각알맞은것은?
1 ᄀ : 0 2 ᄀ : 0 3 ᄀ : b ᄂ : b ᄂ : b * 2 ᄂ : b 4 ᄀ : b 5 ᄀ : b * 2 ᄂ : b * 2 ᄂ : b * 2 [25-26] 아래와같은프로그램이있다고하자. Function www(a() As Integer, ByVal low As Integer, _ ByVal high As Integer) As Integer Dim mid As Integer, sum As Integer Dim i As Integer If low = high - 1 Then www = a(low) Exit Function sum = 0 For i = low To high - 1 sum = sum + a(i) Next i (a) mid = Int((low + high) / 2) www = www(a, low, mid) + www(a, mid, high) + sum End Function Sub main() Dim value(16) As Integer Dim size As Integer Dim i As Integer size = 16 For i = 0 To size - 1 value(i) = i Next i Debug.Print www(value, 0, size) End Sub 25. 위프로그램의실행결과는무엇인가?
26. 프로그램에서밑줄친 (a) 문장이실행되는횟수는? 27. 직사각형모양의색종이두장이책상위에놓여있다. 두색종이의크기는서로다를수있고, 색종이의각변은책상의모서리와평행하게놓여있다. 아래그림과같이책상의모서리를 x축과 y축으로놓고좌표평면을만들면색종이의왼쪽아래좌표와색종이의오른쪽위좌표로하나의색종이의위치를표현할수있다. 첫번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x1, y1), (x2, y2) 로주어지고, 두번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x3, y3), (x4, y4) 로주어진다. 모든좌표값은정수라고가정한다. 이때두색종이가겹치는부분의면적을계산하는함수 area를아래와같이작성하였다. Function max(a As Integer, b As Integer) As Integer If a > b Then max = a Else max = b End Function Function min(a As Integer, b As Integer) As Integer If a < b Then min = a Else min = b End Function Function pos(x As Integer) As Integer If x >= 0 Then pos = x
Else pos = 0 End Function Function area(x1 As Integer, y1 As Integer, x2 As Integer, _ y2 As Integer, x3 As Integer, y3 As Integer, _ x4 As Integer, y4 As Integer) As Integer area = End Function 빈칸에들어갈내용으로알맞은것은? 28. 배열 a 에다음과같이값들이저장되어있다고하자. 이때, 아래프로그램의실행결과는무엇인가? For i = 0 To 9 For j = 0 To 9 If a(i) > a(j) Then t = a(i) a(i) = a(j) a(j) = t Next j Next i Debug.Print a(2) 29. 아래와같은함수 f 가있을때, f(3, 3) 의값은무엇인가? Function f(m As Integer, n As Integer) As Integer If m = 0 Then
f = n + 1 ElseIf n = 0 Then f = f(m - 1, 1) Else f = f(m - 1, f(m, n - 1)) End Function 30. 배열 a에 a(1) 부터 a(9) 까지임의의 9개의정수가들어가있을때, 그중간값을구하여출력하는프로그램을아래와같이작성하였다. 단, 중간값은배열 a의원소들을크기순서대로정렬하였을때 a(5) 에저장되는값을의미한다. Dim mid As Integer For i = 1 To 9 c1 = 0: c2 = 0 For j = 1 To 9 If a(j) ᄀ a(i) Then c1 = c1 + 1 If a(j) ᄂ a(i) Then c2 = c2 + 1 Next j If c1 >= ᄃ And c2 >= ᄅ Then mid = a(i) Exit For Next i Debug.Print mid 면? 다음의보기에서ᄀ ~ ᄅ에들어갈수있는내용이알맞게짝지어진것을모두고르 가. ᄀ < ᄂ > ᄃ 4 ᄅ 4 나. ᄀ < ᄂ >= ᄃ 4 ᄅ 5 다. ᄀ <= ᄂ > ᄃ 5 ᄅ 4 라. ᄀ <= ᄂ >= ᄃ 5 ᄅ 5
1 가 2 라 3 나, 다 4 나, 다, 라 5 가, 나, 다, 라 [31-33] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 지질탐사의결과지하깊숙이묻힌금강석정보를나타내는지도가아래그림처럼만들어졌다. 그림에서굵은점은금강석이위치한곳을나타낸다. 이제땅을파서금강석을캐려고한다. 굴착할영역은항상두대각선이좌표축에평행한정사각형모양이다. 앞으로이사각형을 D-사각형이라고부르자. 현재보유하고있는예산과굴착기술로는대각선의길이가 K인 D-사각형영역을단한번만팔수있다. 그래서굴착할 D-사각형영역에가장많은금강석이포함될수있도록하려고한다. 지도에서가장왼쪽아래의점을좌표축의원점 (0, 0) 이라고하자. 각금강석은정수좌표에위치한다. D-사각형의중심, 즉, 두대각선이만나는점은반드시지도 ( 경계선포함 ) 위에놓여야한다. D-사각형변에놓인금강석도이사각형에포함된것으로본다. 예를들어, 아래그림에서 K=4인경우왼쪽 D-사각형은 5개의금강석을, 오른쪽 D-사각형은 3개의금강석을포함한다. 지질탐사지도에대한정보를입력받아가장많은금강석을포함하는 D- 사각형을구하 는프로그램을작성하라. 입력형식 입력파일의이름은 INPUT.TXT로한다. 첫째줄에 4개의정수 N, M, T, K가빈칸을사이에두고주어진다. N은지도의너비를나타내고, M은지도의높이를나타낸다 (1 N, M 5,000). T는금강석의개수를나타내고, K는 D-사각형의크기 ( 대각선의길이 ) 를나타낸다, T는 1 이상 100 이하의정수이고, K는 2 이상 1,000 이하의정수이다. 둘째줄부
터 T 개의줄에는각줄마다두개의정수 A 와 B 가빈칸을사이에두고주어진다. 여기서 (A, B) 는금강석이위치한곳의좌표이다 (0 A N, 0 B M). 입력으로주어진 금강석의좌표들은모두다르다. 출력형식 출력파일의이름은 OUTPUT.TXT로한다. 첫째줄에 D-사각형의중심의좌표 (X, Y) 를나타내는두개의실수 X, Y를빈칸을사이에두고출력한다. 둘째줄에는이 D-사각형에포함되는금강석의개수를출력한다. 답이여러개있는경우에는그중하나만출력하라. 입력과출력의예 입력 (INPUT.TXT) 10 8 9 4 2 2 3 4 9 3 9 5 8 2 4 5 4 3 5 3 6 4 출력 (OUTPUT.TXT) 5.0 4.0 5 프로그램 Dim n As Integer, m As Integer, t As Integer, k As Integer Dim a(100) As Integer, b(100) As Integer Dim ans As Integer, cx As Integer, cy As Integer Function f(x As Integer) As Integer If x >= 0 Then
f = x Else f = -x End Function Sub check(x As Integer, y As Integer) Dim cnt As Integer, i As Integer cnt = 0 For i = 0 To t - 1 If Then cnt = cnt + 1 Next i If cnt > ans Then ans = cnt cx = x cy = y End Sub Sub main() Dim i As Integer, j As Integer Dim tx As Integer, ty As Integer Dim diff As Integer Open "INPUT.TXT" For Input As #1 Input #1, n, m, t, k n = n * 2 m = m * 2 k = k * 2 For i = 0 To t - 1 Input #1, a(i), b(i) a(i) = a(i) * 2 b(i) = b(i) * 2 Next i Close #1
ans = 0 For i = 0 To t - 1 For j = 0 To t - 1 diff = tx = a(i) + Int(diff / 2) ty = b(i) + Int(diff / 2) Call check(tx - Int(k / 2), ty) Call check(tx + Int(k / 2), ty) Call check(tx, ty - Int(k / 2)) Call check(tx, ty + Int(k / 2)) Next j Next i (a) (b) (c) (d) If cx < 0 Then cx = 0 If cx > n Then cx = n If cy < 0 Then cy = 0 If cy > m Then cy = m Open "OUTPUT.TXT" For Output As #2 Print #2, cx / 2; cy / 2 Print #2, ans Close #2 End Sub 31. ᄀ에들어갈내용은무엇인가? 32. ᄂ에들어갈내용은무엇인가? 33. 프로그램에서밑줄친부분을다음과같이수정하려고한다.
If diff >= 0 Then If diff <= 0 Then (a)~(d) 의각문장이들어가야할위치를알맞게짝지은것은? 1 ( 가 ) : (a), (b) 2 ( 가 ) : (a), (c) 3 ( 가 ) : (b), (c) ( 나 ) : (c), (d) ( 나 ) : (b), (d) ( 나 ) : (a), (d) 4 ( 가 ) : (b), (d) 5 ( 가 ) : (c), (d) ( 나 ) : (a), (c) ( 나 ) : (a), (b) [34-35] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 유시섬에서한가롭게소풍을즐기던다리오와오렌지공주. 다리오가잠시자리를비운 사이에못된악당후퍼가공주를데리고도망가버렸다. 다리오는후퍼가오렌지공주를숨 겨놓은후퍼섬으로여행을떠난다. 유시 후퍼 유시섬에서후퍼섬까지가기위해서는중간에있는여러개의섬을거쳐가야한다. 유시섬과후퍼섬을포함한모든섬들은유시섬과후퍼섬을지나는직선상에있다. 위그림에서, 섬들을나타내는동그라미아래에있는눈금자가각각의섬이유시섬과몇 km나떨어져있는지를나타낸다. 가장왼쪽에있는섬이유시섬이고, 가장멀리있는후퍼섬은 15km 떨어져있다.
한섬에서다른섬으로건너가기위해서는섬마다하나씩있는스프링발판을밟아점프해야한다. 이스프링발판은내구성이약해서한번사용하면부서져버린다. 이때문에, 시작점인유시섬을제외한모든섬들은두번이상방문하면안된다. 스프링발판들의스프링의세기는모두다르다. 섬을나타내는동그라미에쓰여있는숫자는스프링발판을딛고점프했을때가장멀리도달할수있는거리를나타낸다. 가령, 유시섬에서 7km 떨어져있는섬의스프링발판의세기가 3이라면, 스프링발판을딛고도달할수있는섬은유시섬에서 4km 이상 10km 이하떨어져있는섬들이다. 다리오는공주를구하기위해앞만보고질주한다. 공주를구하기전에는스프링발판을밟고후퍼섬을향해서만점프한다. 하지만공주를구한뒤에는공주를들쳐업고유시섬을향해서만뒤도돌아보지않고도망친다. 일부스프링발판은내구도가너무약해서공주를들쳐업은상태에서는발만딛어도부서져버리기도한다. 그림에서유시섬에서 12km 떨어진곳에있는회색으로표시된섬의스프링발판이그예이다. 이런스프링발판들은공주를구하러후퍼섬을향해갈때에만사용할수있다. 유시섬과후퍼섬을포함한모든섬들의정보와섬마다하나씩있는스프링발판의정보가주어질때, 다리오가유시섬을출발해공주를구하고돌아오는서로다른경로의개수를 1000으로나눈나머지를출력하는프로그램을작성하시오. 입력형식 입력파일의이름은 INPUT.TXT로한다. 첫째줄에는섬의개수 N이주어진다. N은유시섬과후퍼섬도포함한개수이고 3 이상 500 이하이다. 이어지는 N개의줄에는각각의섬에대한정보가한줄에하나씩주어진다. 섬의정보는유시섬과의거리가가까운순으로주어진다. 그러므로첫번째로정보가주어지는섬은항상유시섬이고, 마지막으로정보가주어지는섬은항상후퍼섬이다. 섬의정보를나타내는각각의줄에는섬에대한정보를표현하는세개의정수가빈칸을사이에두고주어진다. 첫번째정수는유시섬과의거리이다. 유시섬에대해서는이값이 0이고, 후퍼섬에서이값이가장크다. 거리는 0 이상 10,000 이하이다. 이값이동일한두섬은존재하지않는다. 두번째정수는스프링발판의세기, 즉해당섬에서좌우로얼마나떨어진섬까지점프할수있는지를나타내는값이다. 이값은 1 이상 1,000 이하이다. 세번째정수는해당섬의스프링발판을오렌지공주를들쳐업은상태에서도사용할수있는지를나타내는값이다. 1이면오렌지공주와함께이용할수있고, 0이면이용할수없다. 후퍼섬에서이값은항상 1이다.
출력형식 출력파일의이름은 OUTPUT.TXT 로한다. 첫째줄에유시섬에서출발해오렌지공주를 구해오는총경로의수를 1,000 으로나눈나머지를출력한다. 입력과출력의예 입력 (INPUT.TXT) 8 0 7 1 3 4 1 6 8 1 8 6 1 12 2 0 13 2 1 14 2 1 15 7 1 출력 (OUTPUT.TXT) 6 프로그램 Sub main() Dim pos(501) As Integer, spring(501) As Integer, _ avail(501) As Integer Dim d(500, 500) As Integer Dim n As Integer Dim i As Integer, j As Integer, k As Integer Dim ret As Integer Open "INPUT.TXT" For Input As #1 Input #1, n For i = 1 To n Input #1, pos(i), spring(i), avail(i) Next i
Close #1 For i = 1 To n - 1 For j = 1 To n - 1 d(i, j) = 0 Next j Next i d(1, 1) = 1 For i = 2 To n - 1 For j = 1 To For k = 1 To If pos(k) + spring(k) >= pos(i) Then d(i, j) = (d(i, j) + d(k, j)) Mod 1000 Next k Next j If avail(i) = 1 Then For j = 1 To For k = 1 To If pos(k) >= pos(i) - spring(i) Then d(j, i) = (d(j, i) + d(j, k)) Mod 1000 Next k Next j Next i ret = 0 For i = 1 To n - 1 For j = 1 To n - 1 If pos(i) + spring(i) >= pos(n) And _ pos(j) >= pos(n) - spring(n) Then ret = (ret + ) Mod 1000 Next j Next i Open "OUTPUT.TXT" For Output As #2 Print #2, ret
End Sub Close #2 34. ᄀ, ᄂ에들어갈내용은각각무엇인가? 1 ᄀ : i - 1 2 ᄀ : i - 1 3 ᄀ : i - 1 ᄂ : i - 1 ᄂ : j - 1 ᄂ : n - 1 4 ᄀ : n - 1 5 ᄀ : n - 1 ᄂ : i - 1 ᄂ : n - 1 35. ᄃ에들어갈내용은무엇인가? 1 d(i, j) 2 d(j, i) 3 d(1, i) * d(1, j) 4 d(1, i) * d(j, 1) 5 d(i, 1) * d(1, j)
2010 중고등부정답 35.