- 1 -
2010 초등부문제 1. 나, 아버지, 할아버지의나이관계가다음과같다. 나와아버지의나이차이는 30 이고, 아버지와할아버지의나이차이는 26이고, 나와할아버지의나이합은 90이다. 나는몇살인가? 2. 기약분수는분자와분모의최대공약수가 1 인분수이다. 분수 와분수 사이의 분수중에서분모가 24 인기약분수는몇개인가? 3. 1 부터 2000 까지의정수들중에서 4 의배수이고 6 의배수이면서 5 의배수가아닌 수는몇개인가? 4. 분수 를소수로나타낼때, 소수점이하첫째자리부터 33번째자리까지의모든 자릿수들의합은얼마인가? 5. A, B, C, D, E 5 명이다음과같이말하였다. 이들중한사람만참말을하고나머 지는모두거짓말을하였다. 그러면참말을한사람은누구인가? A: D 가거짓말을하고있다. B: C 는참말을하고있다. C: E 는참말을하고있다. D: B 가거짓말을하고있다. E: A 는참말을하고있다. 6. 정육면체쌓기나무를쌓아올려만든모양을위, 앞, 오른쪽옆의세방향에서보았 더니다음과같았다. 쌓기나무의수는몇개인가? ( 뒤 ) ( 앞 ) 위앞오른쪽옆 - 2 -
7. 다음과같이수들이나열되어있다. 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, 이때 50번째수는무엇인가? 8. 30, 15, 10, 25, 5, 20을인접한두수들만교환하여 5, 10, 15, 20, 25, 30과같이크기순서대로정렬하고자한다. 최소교환횟수는얼마인가? 9. A, B, C, D 4명의사람들이가지고있는돈의총금액은 1000원이다. 이들 4명이각자가가지고있는돈에대한질문에아래와같이답하였다. A: 나는 C가가지고있는금액의두배를가지고있다. B: 나는 D보다 100원많다. C: 나는 B보다 200원많다. D: 내가가지고있는금액은같은두정수의곱이다. 위의네사람중, 가지고있는돈이 0원인한사람만거짓말을하고있을때, A와 D가가지고있는돈의합은얼마인가? 10. 두척의배가같은위치에서같은방향으로동시에출발하여일정한속도로나아간다. 2시간 30분후두배사이의거리가 10km이었다. 이후 2시간을더항해한후두배사이의거리는몇 km인가? 11. 25개의점이아래와같이놓여있다. 점선으로이은두점사이의거리가모두같다고할때, 서로다른네개의점으로만들수있는정사각형의개수는모두몇개인가? - 3 -
12. 철수네반의각학생은방과후수업으로컴퓨터활용, 홈페이지제작, 프로그래밍의세과목중적어도하나이상을들어야한다. 이들과목들의수업시간은서로다르므로각학생들은여러과목을들을수있다. 이들과목에대하여수업을듣는학생들의수를조사하여다음과같은결과를얻었다. 컴퓨터활용수업을듣는학생들수 : 15 홈페이지제작수업을듣는학생들수 : 20 프로그래밍수업을듣는학생들수 : 10 컴퓨터활용과홈페이지제작수업을듣는학생들수 : 9 컴퓨터활용과프로그래밍수업을듣는학생들수 : 3 홈페이지제작과프로그래밍수업을듣는학생들수 : 5 컴퓨터활용과홈페이지제작과프로그래밍세과목모두수업을듣는학생들수 : 2 철수네반학생들은모두몇명인가? 13. 키가모두다른 10명의학생들 A, B, C, D, E, F, G, H, I, J가순서대로줄을서있다 (A가가장앞에있음 ). 각자뒤에있는사람들중에서자기자신보다키가작은사람의수를세어보았더니아래표와같았다. A B C D E F G H I J 4 5 0 6 3 2 3 1 1 0 E보다키가큰사람은몇명인가? 14. 한변의길이가 3인정육면체가있다. 아래그림과같이각면의중앙에한변의길이가 1인정사각형모양의구멍을뚫었다. 정사각형의각변은정육면체의변과평행하게놓여있다. 구멍은그면에수직한방향으로뚫기시작하여반대쪽면을만날때까지계속한다. 이렇게구멍을뚫은입체도형의겉넓이는얼마인가? - 4 -
15. 다음과같이번식을하는동물이있다 : 1) 태어나서정확히 1년만에 2마리이하의새끼를낳는다. 2) 태어나서 1년이지난이후에는더이상새끼를낳지않는다. 갓태어난새끼한마리로부터번식된동물이이새끼를포함하여모두 270마리였다. 이와같이되는데걸린기간의최소년수는얼마인가? <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. 아래와같은프로그램에서 count(5) 를수행한결과는무엇인가? void count(int n) { if (n > 0) count(n - 1); printf("%d ", n); - 5 -
1 0 1 2 3 4 5 2 1 2 3 4 5 3 5 4 3 2 1 0 4 5 4 3 2 1 5 5 5 5 5 5 5 19. 아래프로그램의실행결과는무엇인가? c = 0; for (i = 1 ; i <= 30 ; i++) c = c + (i % 2) + (i % 3) + (i % 5); printf("%d\n", c); 20. 아래프로그램의실행결과는무엇인가? a = 30; b = 16; while (b > 0) { c = a % b; a = b; b = c; printf("%d\n", a); 21. 아래프로그램의실행결과는무엇인가? d[1] = 6; d[2] = 2; d[3] = 1; d[4] = 5; d[5] = 4; d[6] = 2; d[7] = 4; d[8] = 12; s = d[1]; n1 = d[1]; n2 = d[1]; for (i = 2 ; i <= 8 ; 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) / 6); - 6 -
22. 아래프로그램의실행결과는무엇인가? 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 [23-24] 아래와같은함수 f 가있다고하자. int f(int a, int b) { if (a <= 0) return b; else return f(a - 1, b * 2) + b; 23. f(3, 2) 의값은무엇인가? 24. 함수 f 를재귀호출 (recursive call) 을사용하지않도록다음과같이수정하였다. int f(int a, int b) { int sum; sum = ᄀ ; while (a > 0) { a--; sum = sum + ᄂ ; b = b * 2; - 7 -
return sum; ᄀ, ᄂ에들어갈내용으로각각알맞은것은? 1 ᄀ : 0 2 ᄀ : 0 3 ᄀ : b ᄂ : b ᄂ : b * 2 ᄂ : b 4 ᄀ : b 5 ᄀ : b * 2 ᄂ : b * 2 ᄂ : b * 2 25. 아래와같은함수 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; 26. 배열 A 에 A[1] 부터 A[10] 까지임의의정수가들어가있을때, 아래와같은프로 그램을사용하여이들을작은것부터차례대로정렬하려고한다. for (i = 1 ; i <= 10 ; i++) for (j = 1 ; j <= if (A[j] > A[j + 1]) { temp = A[j]; A[j] = A[j + 1]; A[j + 1] = temp; ; j++) 다음중빈칸에들어갈수있는내용을모두고르면? - 8 -
가. 9 나. i - 1 다. 10 - i [27-28] 직사각형모양의도화지위에두개의선분이그려져있다. 첫번째선분은도화지의왼쪽변에평행하게놓여있고, 두번째선분은도화지의아래쪽변에평행하게놓여있다. 아래그림과같이도화지의아래쪽변을 x축으로, 왼쪽변을 y축으로놓고좌표평면을만들면양끝점의좌표로각선분의위치를표현할수있다. y (x1, y) (x2, y) (x, y2) (x, y1) x 첫번째선분의아래쪽끝점과위쪽끝점의좌표는각각 (x, y1), (x, y2) 로주어지고, 두번째선분의왼쪽끝점과오른쪽끝점의좌표는각각 (x1, y), (x2, y) 로주어진다. 모든좌표값은정수라고가정한다. 이때, 두선분이서로만나는지를판별하는함수 cross를다음과같이작성하였다. 단, 한선분의끝점이다른선분위에놓여있어도두선분은만나는것으로본다. int cross(int x, int y1, int y2, int y, int x1, int x2) { if ((x ᄀ x1) (x ᄂ x2)) return 0; // 만나지않는다. else if ((y ᄀ y1) (y ᄂ y2)) return 0; // 만나지않는다. else return 1; // 만난다. 27. ᄀ에들어갈내용으로알맞은것은? - 9 -
28. ᄂ에들어갈내용으로알맞은것은? [29-30] 아래와같은프로그램이있다. A[0] = 3; A[1] = 8; A[2] = 12; A[3] = 19; A[4] = 22; B[0] = 2; B[1] = 5; B[2] = 20; B[3] = 25; B[4] = 30; x = 0; y = 0; p = 0; cnt = 0; while (x < 5 && y < 5) { if (A[x] < B[y]) { C[p] = A[x]; x++; else { C[p] = B[y]; y++; cnt++; p++; while (x < 5) { C[p] = A[x]; x++; p++; while (y < 5) { C[p] = B[y]; y++; p++; printf("%d\n", cnt); ᄀ ᄂ ᄃ ᄅ 29. 위프로그램의실행결과는무엇인가? 30. ᄀ ~ ᄅ로표시된문장중에서한번도실행되지않는것은? [31-33] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. - 10 -
문제 0에서부터 9까지의숫자로이루어진 N개의숫자가나열된수열이있다. 그수열안에서연속해서커지거나 ( 같은것포함 ), 혹은연속해서작아지는 ( 같은것포함 ) 수열중가장길이가긴것을찾아내어그길이를출력하는프로그램을작성하라. 예를들어수열 1 2 2 4 4 5 7 7 2 의경우에는 1 2 2 4 4 5 7 7 이가장긴구간이되므로그길이 8을출력한다. 수열 4 1 3 3 2 2 9 2 3 의경우에는 3 3 2 2 가가장긴구간이되므로그길이 4를출력한다. 또 1 5 3 6 4 7 1 3 2 9 5 의경우에는연속해서커지거나작아지는수열의길이가 3 이상인경우가없으므로 2를출력하여야한다. 입력형식 입력파일의이름은 INPUT.TXT 로한다. 첫째줄에는수열의길이 N 이주어지고, 둘째 줄에는 N 개의숫자가빈칸을사이에두고주어진다. N 은 1 이상 1,000 이하의정수이다. 출력형식 출력파일의이름은 OUTPUT.TXT 로한다. 첫째줄에가장긴길이를출력한다. 입력과출력의예 입력 (INPUT.TXT) 9 1 2 2 4 4 5 7 7 2 출력 (OUTPUT.TXT) 8 프로그램 #include <stdio.h> int n; int a[1000]; - 11 -
int main() { int now, up, down, r; int i; FILE* fin = fopen("input.txt", "r"); fscanf(fin, "%d", &n); for (i = 0 ; i <= n - 1 ; i++) fscanf(fin, "%d", &a[i]); fclose(fin); now = a[0]; up = ᄀ ; down = ᄀ ; r = ᄂ ; for (i = 1 ; i <= n - 1 ; i++) { if (now == a[i]) { ᄃ else if (now < a[i]) { up++; down = 1; else { up = 1; down++; now = a[i]; if (r < up) r = up; if (r < down) r = down; (a) FILE* fout = fopen("output.txt", "w"); fprintf(fout, "%d\n", r); fclose(fout); return 0; - 12 -
31. ᄀ, ᄂ에들어갈값은각각무엇인가? 1 0, 0 2 0, 1 3 1, 0 4 1, 1 5 1, -1 32. 다음중ᄃ에들어가야하는내용은무엇인가? 33. 다음중입력으로주어졌을때 (a) 의밑줄친부분이실행되지않는수열은? 1 0 1 2 2 1 4 7 8 8 2 3 5 2 1 8 2 7 5 9 3 4 2 1 3 5 6 7 8 9 4 5 5 5 5 6 6 8 9 9 5 9 8 7 6 5 4 3 2 1 [34-35] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 KOI 통신연구소는레이저를이용한새로운비밀통신시스템개발을위한실험을하고있다. 실험을위하여일직선위에 N개의높이가서로다른탑을수평직선의왼쪽부터오른쪽방향으로차례로세우고, 각탑의꼭대기에레이저송신기를설치하였다. 모든탑의레이저송신기는레이저신호를지표면과평행하게수평직선의왼쪽방향으로발사하고, 탑의기둥모두에는레이저신호를수신하는장치가설치되어있다. 하나의탑에서발사된레이저신호는가장먼저만나는단하나의탑에서만수신이가능하다. 예를들어높이가 6, 9, 5, 7, 4인다섯개의탑이수평직선에일렬로서있고, 모든탑에서는주어진탑순서의반대방향 ( 왼쪽방향 ) 으로동시에레이저신호를발사한다고하자. 그러면, 높이가 4인다섯번째탑에서발사한레이저신호는높이가 7인네번째탑이수신을하고, 높이가 7인네번째탑의신호는높이가 9인두번째탑이, 높이가 5인세번째탑의신호도높이가 9인두번째탑이수신을한다. 높이가 9인두번째탑과높이가 6 인첫번째탑이보낸레이저신호는어떤탑에서도수신을하지못한다. 탑들의개수 N과탑들의높이가주어질때, 각각의탑에서발사한레이저신호를어느탑에서수신하는지를알아내는프로그램을작성하라. - 13 -
입력형식 입력파일의이름은 INPUT.TXT 로한다. 첫째줄에탑의수를나타내는정수 N 이주어 진다. N 은 1 이상 1,000 이하이다. 둘째줄에는 N 개의탑들의높이가직선상에놓인순서 대로하나의빈칸을사이에두고주어진다. 탑들의높이는 1 이상 10,000 이하의정수이다. 출력형식 출력파일의이름은 OUTPUT.TXT 로한다. 첫째줄에주어진탑들의순서대로각각의탑 들에서발사한레이저신호를수신한탑들의번호를하나의빈칸을사이에두고출력한다. 만약레이저신호를수신하는탑이존재하지않으면 0 을출력한다. 입력과출력의예 입력 (INPUT.TXT) 5 6 9 5 7 4 출력 (OUTPUT.TXT) 0 0 2 2 4 프로그램 #include <stdio.h> int n; int h[1001]; int out[1001]; int stack[1001]; int p; int main() { int i; FILE* fin = fopen("input.txt", "r"); - 14 -
fscanf(fin, "%d", &n); for (i = 1 ; i <= n ; i++) fscanf(fin, "%d", &h[i]); fclose(fin); for (i = 1 ; i <= n ; i++) out[i] = 0; p = 1; for (i = n ; i >= 1 ; i--) { (a) while (p > 1 && ᄀ < h[i]) { (b) p--; out[stack[p]] = i; (c) stack[p] = i; (d) p++; (e) FILE* fout = fopen("output.txt", "w"); for (i = 1 ; i <= n ; i++) fprintf(fout, "%d ", out[i]); fclose(fout); return 0; 34. ᄀ에들어갈내용은무엇인가? 1 h[p] 2 h[p - 1] 3 h[stack[i]] 4 h[stack[p]] 5 h[stack[p - 1]] 35. 문제에서밑줄친부분을다음과같이수정하였다. 모든탑의레이저송신기는레이저신호를지표면과평행하게수평직선의오른쪽방향으로발사하고, 탑의기둥모두에는레이저신호를수신하는장치가설치되어있다. 하나의탑에서발사된레이저신호는가장먼저만나는단하나의탑에서만수신이가능하다. 예를들어높이가 6, 9, 5, 7, 4인다섯개의탑이수평직선에일렬로서있고, 모든탑에서는주어진탑순서와같은방향 ( 오른쪽방향 ) 으로동시에레이저신호를발사한다고하자. - 15 -
프로그램에서 (a)~(e) 로표시된줄중에서단한줄만을고쳐, 수정된문제를해 결하려고한다. (a)~(e) 중에서고쳐야하는것은? <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. 아래와같은프로그램에서 Call count(5) 를수행한결과는무엇인가? Sub count(n As Integer) If n > 0 Then Call count(n - 1) End If Debug.Print n; End Sub 1 0 1 2 3 4 5 2 1 2 3 4 5 3 5 4 3 2 1 0 4 5 4 3 2 1 5 5 5 5 5 5 5-16 -
19. 아래프로그램의실행결과는무엇인가? c = 0 For i = 1 To 30 c = c + (i Mod 2) + (i Mod 3) + (i Mod 5) Next i Debug.Print c 20. 아래프로그램의실행결과는무엇인가? a = 30: b = 16 While b > 0 c = a Mod b a = b b = c Wend Debug.Print a 21. 아래프로그램의실행결과는무엇인가? d(1) = 6: d(2) = 2: d(3) = 1: d(4) = 5 d(5) = 4: d(6) = 2: d(7) = 4: d(8) = 12 s = d(1) n1 = d(1) n2 = d(1) For i = 2 To 8 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) / 6) 22. 아래프로그램의실행결과는무엇인가? - 17 -
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 [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 If End Function 23. f(3, 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 - 18 -
ᄀ, ᄂ에들어갈내용으로각각알맞은것은? 1 ᄀ : 0 2 ᄀ : 0 3 ᄀ : b ᄂ : b ᄂ : b * 2 ᄂ : b 4 ᄀ : b 5 ᄀ : b * 2 ᄂ : b * 2 ᄂ : b * 2 25. 아래와같은함수 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 End If n = (n * n) Mod m k = Int(k / 2) Wend f = a End Function 26. 배열 A 에 A(1) 부터 A(10) 까지임의의정수가들어가있을때, 아래와같은프로 그램을사용하여이들을작은것부터차례대로정렬하려고한다. For i = 1 To 10 For j = 1 To If A(j) > A(j + 1) Then temp = A(j) A(j) = A(j + 1) A(j + 1) = temp End If Next j Next i 다음중빈칸에들어갈수있는내용을모두고르면? - 19 -
가. 9 나. i - 1 다. 10 - i [27-28] 직사각형모양의도화지위에두개의선분이그려져있다. 첫번째선분은도화지의왼쪽변에평행하게놓여있고, 두번째선분은도화지의아래쪽변에평행하게놓여있다. 아래그림과같이도화지의아래쪽변을 x축으로, 왼쪽변을 y축으로놓고좌표평면을만들면양끝점의좌표로각선분의위치를표현할수있다. y (x1, y) (x2, y) (x, y2) (x, y1) x 첫번째선분의아래쪽끝점과위쪽끝점의좌표는각각 (x, y1), (x, y2) 로주어지고, 두번째선분의왼쪽끝점과오른쪽끝점의좌표는각각 (x1, y), (x2, y) 로주어진다. 모든좌표값은정수라고가정한다. 이때, 두선분이서로만나는지를판별하는함수 cross를다음과같이작성하였다. 단, 한선분의끝점이다른선분위에놓여있어도두선분은만나는것으로본다. Function cross(x As Integer, y1 As Integer, y2 As Integer, _ y As Integer, x1 As Integer, x2 As Integer) As Integer If (x ᄀ x1) Or (x ᄂ x2) Then cross = 0 ' 만나지않는다. ElseIf (y ᄀ y1) Or (y ᄂ y2) Then cross = 0 ' 만나지않는다. Else cross = 1 ' 만난다. End If End Function 27. ᄀ에들어갈내용으로알맞은것은? - 20 -
28. ᄂ에들어갈내용으로알맞은것은? [29-30] 아래와같은프로그램이있다. A(0) = 3: A(1) = 8: A(2) = 12: A(3) = 19: A(4) = 22 B(0) = 2: B(1) = 5: B(2) = 20: B(3) = 25: B(4) = 30 x = 0: y = 0: p = 0 cnt = 0 While x < 5 And y < 5 If A(x) < B(y) Then C(p) = A(x) x = x + 1 Else C(p) = B(y) y = y + 1 End If cnt = cnt + 1: p = p + 1 Wend While x < 5 C(p) = A(x) x = x + 1: p = p + 1 Wend While y < 5 C(p) = B(y) y = y + 1: p = p + 1 Wend Debug.Print cnt ᄀ ᄂ ᄃ ᄅ 29. 위프로그램의실행결과는무엇인가? 30. ᄀ ~ ᄅ로표시된문장중에서한번도실행되지않는것은? [31-33] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. - 21 -
문제 0에서부터 9까지의숫자로이루어진 N개의숫자가나열된수열이있다. 그수열안에서연속해서커지거나 ( 같은것포함 ), 혹은연속해서작아지는 ( 같은것포함 ) 수열중가장길이가긴것을찾아내어그길이를출력하는프로그램을작성하라. 예를들어수열 1 2 2 4 4 5 7 7 2 의경우에는 1 2 2 4 4 5 7 7 이가장긴구간이되므로그길이 8을출력한다. 수열 4 1 3 3 2 2 9 2 3 의경우에는 3 3 2 2 가가장긴구간이되므로그길이 4를출력한다. 또 1 5 3 6 4 7 1 3 2 9 5 의경우에는연속해서커지거나작아지는수열의길이가 3 이상인경우가없으므로 2를출력하여야한다. 입력형식 입력파일의이름은 INPUT.TXT 로한다. 첫째줄에는수열의길이 N 이주어지고, 둘째 줄에는 N 개의숫자가빈칸을사이에두고주어진다. N 은 1 이상 1,000 이하의정수이다. 출력형식 출력파일의이름은 OUTPUT.TXT 로한다. 첫째줄에가장긴길이를출력한다. 입력과출력의예 입력 (INPUT.TXT) 9 1 2 2 4 4 5 7 7 2 출력 (OUTPUT.TXT) 8 프로그램 Dim n As Integer Dim a(1000) As Integer Sub Main() - 22 -
Dim now As Integer, up As Integer, down As Integer, r As Integer Dim i As Integer Open "INPUT.TXT" For Input As #1 Input #1, n For i = 0 To n - 1 Input #1, a(i) Next i Close #1 now = a(0) up = ᄀ : down = ᄀ r = ᄂ For i = 1 To n - 1 If now = a(i) Then ᄃ ElseIf now < a(i) Then up = up + 1 down = 1 Else up = 1 down = down + 1 End If now = a(i) If r < up Then r = up End If If r < down Then r = down End If Next i (a) Open "OUTPUT.TXT" For Output As #2 Print #2, r Close #2 End Sub 31. ᄀ, ᄂ에들어갈값은각각무엇인가? - 23 -
1 0, 0 2 0, 1 3 1, 0 4 1, 1 5 1, -1 32. 다음중ᄃ에들어가야하는내용은무엇인가? 33. 다음중입력으로주어졌을때 (a) 의밑줄친부분이실행되지않는수열은? 1 0 1 2 2 1 4 7 8 8 2 3 5 2 1 8 2 7 5 9 3 4 2 1 3 5 6 7 8 9 4 5 5 5 5 6 6 8 9 9 5 9 8 7 6 5 4 3 2 1 [34-35] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 KOI 통신연구소는레이저를이용한새로운비밀통신시스템개발을위한실험을하고있다. 실험을위하여일직선위에 N개의높이가서로다른탑을수평직선의왼쪽부터오른쪽방향으로차례로세우고, 각탑의꼭대기에레이저송신기를설치하였다. 모든탑의레이저송신기는레이저신호를지표면과평행하게수평직선의왼쪽방향으로발사하고, 탑의기둥모두에는레이저신호를수신하는장치가설치되어있다. 하나의탑에서발사된레이저신호는가장먼저만나는단하나의탑에서만수신이가능하다. 예를들어높이가 6, 9, 5, 7, 4인다섯개의탑이수평직선에일렬로서있고, 모든탑에서는주어진탑순서의반대방향 ( 왼쪽방향 ) 으로동시에레이저신호를발사한다고하자. 그러면, 높이가 4인다섯번째탑에서발사한레이저신호는높이가 7인네번째탑이수신을하고, 높이가 7인네번째탑의신호는높이가 9인두번째탑이, 높이가 5인세번째탑의신호도높이가 9인두번째탑이수신을한다. 높이가 9인두번째탑과높이가 6 인첫번째탑이보낸레이저신호는어떤탑에서도수신을하지못한다. 탑들의개수 N과탑들의높이가주어질때, 각각의탑에서발사한레이저신호를어느탑에서수신하는지를알아내는프로그램을작성하라. - 24 -
입력형식 입력파일의이름은 INPUT.TXT 로한다. 첫째줄에탑의수를나타내는정수 N 이주어 진다. N 은 1 이상 1,000 이하이다. 둘째줄에는 N 개의탑들의높이가직선상에놓인순서 대로하나의빈칸을사이에두고주어진다. 탑들의높이는 1 이상 10,000 이하의정수이다. 출력형식 출력파일의이름은 OUTPUT.TXT 로한다. 첫째줄에주어진탑들의순서대로각각의탑 들에서발사한레이저신호를수신한탑들의번호를하나의빈칸을사이에두고출력한다. 만약레이저신호를수신하는탑이존재하지않으면 0 을출력한다. 입력과출력의예 입력 (INPUT.TXT) 5 6 9 5 7 4 출력 (OUTPUT.TXT) 0 0 2 2 4 프로그램 Dim n As Integer Dim h(1001) As Integer Dim out(1001) As Integer Dim stack(1001) As Integer Dim p As Integer Sub main() Dim i As Integer Open "INPUT.TXT" For Input As #1 Input #1, n For i = 1 To n Input #1, h(i) - 25 -
Next i Close #1 For i = 1 To n Next i out(i) = 0 p = 1 For i = n To 1 Step -1 (a) While p > 1 And ᄀ < h(i) (b) p = p - 1 out(stack(p)) = i (c) Wend stack(p) = i (d) p = p + 1 (e) Next i Open "OUTPUT.TXT" For Output As #2 For i = 1 To n Print #2, out(i); Next i Close #2 End Sub 34. ᄀ에들어갈내용은무엇인가? 1 h(p) 2 h(p - 1) 3 h(stack(i)) 4 h(stack(p)) 5 h(stack(p - 1)) 35. 문제에서밑줄친부분을다음과같이수정하였다. 모든탑의레이저송신기는레이저신호를지표면과평행하게수평직선의오른쪽방향으로발사하고, 탑의기둥모두에는레이저신호를수신하는장치가설치되어있다. 하나의탑에서발사된레이저신호는가장먼저만나는단하나의탑에서만수신이가능하다. 예를들어높이가 6, 9, 5, 7, 4인다섯개의탑이수평직선에일렬로서있고, 모든탑에서는주어진탑순서와같은방향 ( 오른쪽방향 ) 으로동시에레이저신호를발사한다고하자. - 26 -
프로그램에서 (a)~(e) 로표시된줄중에서단한줄만을고쳐, 수정된문제를해 결하려고한다. (a)~(e) 중에서고쳐야하는것은? - 27 -
- 28 -
2010 초등부정답 1. 4 2. 3 3. 1 4. 5 5. 4 6. 3 7. 2 8. 2 9. 4 10. 1 11. 5 12. 5 13. 2 14. 3 15. 3 16. 3 17. 5 18. 1 19. 3 20. 2 21. 2 22. 1 23. 3 24. 4 25. 4 26. 5 27. 1 28. 2 29. 3 30. 3 31. 4 32. 3 33. 4 34. 5 35. 1-29 -