2008 시도예선초등부문제 1. 다음은일정한규칙에따라수를늘어놓은것이다. 빈칸에가장알맞은수는? 2, 3, 5, 8, 12, 17, ( ) 2. A, B, C, D 가각각 0~9 까지숫자중에하나이고다른알파벳은다른숫자를나타낸 다. 다음식을만족하는 D 의값은? 3. 1 을 7 로나누었을때소수점이하 19 번째자리수는다음중어떤것인가? 5. 미국돈 40 달러는싱가포르돈 32 달러에해당하고, 싱가포르돈 80 달러는홍콩돈 100 달러에해당한다. 이때미국돈 111 달러는홍콩돈으로몇달러가되는가? 6. 암탉은한마리에 15원, 수탉은한마리에 9원, 병아리는한마리에 1원이다. 300원을모두사용하여정확히 100마리를사는데암탉을되도록많이사려고한다면암탉을몇마리사게될까?
7. A 나라에는 1 원, 5 원, 10 원, 12 원, 25 원의다섯가지동전이있다. 79 원을동전으로갖고 자할때, 가장적은개수의동전으로갖고자한다면몇개가될까? 8. A, B, C, D가달리기경주를하였다. 경주시작전에각각은경주결과에대하여다음과같이예측을하였다. A: B가 1등을할것이다. B: D가꼴찌를할것이다. C: A가 2등을할것이다. D: A의예측이맞을것이다. 실제로경기를한후위의예측들중에서하나만맞았고, 그예측은꼴찌를한선수의예측이었다. 경기에서 1등을한선수는누구일까? 9. 철수에게는세명의딸이있는데, 영희에게아이들의나이를맞추어보라고하면서딸들나이들의곱이 36이라고하였다. 영희가그것만으로는알수없다고하자, 세딸나이의합을알려주었다. 그런데영희는아직도정보가부족하다고하였다. 세딸나이의합으로알려준것은다음중어떤것인가? 10. 지성이의지난번국어, 영어, 산수시험의평균은 85점이었다. 이번시험에서국어성적은 5점, 영어성적은 7점이올랐으나수학성적은 3점이내렸다면, 지성이의이번시험평균은얼마인가? 11. 16 개의점이아래와같이놓여있다. 점선으로이은두점사이의거리가모두같다고 할때, 서로다른네점을이어만들수있는정사각형의개수는모두몇개인가?
12. 방송국에서 100명의학생에게질문을하여다음과같은결과를얻었다. 65명이국어강의를듣고있으며, 55명이산수강의를듣고있고, 25명이국어와산수강의를같이듣고있다. 100명중아무것도듣지않고있는학생수는전부몇명인가? 13. 아래그림은숫자삼각형을보여준다. 맨꼭대기에서바닥에까지한층에하나씩연결되는길을찾아내려가는데그합이최대가되는것을구하려는문제이다. 여기서한층씩내려간다는것은대각선방향으로왼쪽혹은대각선방향으로오른쪽으로내려가는것이다. 아래그림에서최대가되는합은얼마인가? 14. 다음그림에서화살표는일의순서를나타내는것이다. 예를들어다음그림에서 8번일을수행하려면 5번일과 6번일을먼저하여야한다는뜻이다. 다음보기의순서로일을수행하고자할때모든일을제대로끝낼수없는경우는어떤것인가?
1 1 2 3 4 5 6 7 8 9 2 1 2 4 3 5 6 7 8 9 3 1 4 2 3 5 6 7 8 9 4 1 2 5 3 4 6 8 7 9 5 1 2 3 4 5 7 6 8 9 15. 펜을떼지않고도형을그리는데한번지나간선을다시지나지않고그릴수있다면그도형은한붓그리기가가능하다고한다. 다음과같은도형을한붓그리기로그리려하는데시작점으로반드시돌아와서마쳐야한다면최소몇개의선분을추가해야하는가? <Visual C++ 사용자용문제 > 문제나프로그램내에명시되지않은변수와배열은모두 int 형이다. 16. 아래프로그램의실행결과는무엇인가? c = 0; for (i = 1; i <= 10; i++) c++; printf("%d\n", c);
17. 아래프로그램의실행결과는무엇인가? c = 1; for (i = 0; i <= 5; i++) c = c * i; 18. 아래프로그램의실행결과는무엇인가? c = 0; for (i = 7; i <= 62; i += 6) c++; printf("%d\n", c); 19. 다음은어떤프로그램의일부이다. 다음부분이실행된뒤 s 의값은? s = 1; for (i = 1; i <= 2008; i++) { if (s < 5) { s *= 2; else { s -= 5;
20. 다음은 1 에서 100 까지소수의개수를구하는프로그램이다. cnt = 0; for (i = 2; i <= 100; i++) { prime = 1; j = 2; while ( ᄀ ) { if (i % j == 0) prime = 0; j++; cnt += prime; printf("%d\n", cnt); 다음중ᄀ에들어갔을때올바른답이출력되지않는것은? [21-22] A 라는배열에아래와같이값이담겨있다. 이배열을아래프로그램으로처리하려고할때물음에답하라. for (i = 2; i <= 6; i++) { for (j = i; j >= 2; j--) { if (A[j] > A[j-1]) break; t = A[j]; A[j] = A[j-1]; A[j-1] = t;... ᄀ
21. ᄀ으로표시된줄은총몇번수행되는가? 22. 배열 A[1] 부터 A[6] 에다음과같이 6 개의수가들어있을때, ᄀ의줄이수행되는횟수 가가장적은것은? 1 6, 5, 4, 3, 2, 1 2 6, 1, 2, 3, 4, 5 3 2, 3, 1, 4, 5, 6 4 4, 2, 1, 3, 5, 6 5 1, 2, 6, 5, 4, 3 [23-25] 직사각형모양의색종이두장이책상위에놓여있다. 두색종이의크기는서로다를수있고, 각각의색종이의변들중적어도하나씩은책상모서리와평행하다. 책상의모서리를 x축으로놓고좌표평면을만들면색종이의왼쪽아래좌표와색종이의오른쪽위좌표로하나의색종이의위치를표현할수있다. y (x4, y4) (x2, y2) (x3, y3) (x1, y1) (0, 0) x 첫번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x1, y1), (x2, y2) 로주어지고, 두번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x3, y3), (x4, y4) 로주어진다. 이때두직사각형이겹치는지를판별하는프로그램을작성하려고한다. 모서리만닿거나꼭지점만닿는경우는겹치는경우가아닌것으로하자. int intersects(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) { if ( x4 ᄀ x1 x3 ᄂ x2 ) return 0; // 겹치지않는다. else if ( y4 ᄀ y1 y3 ᄂ y2 ) return 0; // 겹치지않는다. else return 1;
23. ᄀ에들어갈연산자는무엇인가? 24. ᄂ에들어갈연산자는무엇인가? 25. intersects(1, 1, 5, 5, 1, 2, 3, 4) + 2 * intersects(1, 1, 4, 4, 2, 2, 3, 3) 의결과값 은? 26. 아래프로그램의실행결과는무엇인가? int cnt; void test(int n) { if (n <= 1) cnt++; else { test(n / 2); test(n / 2); int main() { cnt = 0; test(100); printf("%d\n", cnt); return 0;
27. 아래프로그램이실행된뒤 lo, hi 의값은? N = 10; a[0] = 1, a[1] = 3, a[2] = 4, a[3] = 7, a[4] = 8; a[5] = 9, a[6] = 11, a[7] = 13, a[8] = 14, a[9] = 16; s = 4; lo = 0, hi = N - 1; while (lo <= hi) { m = (lo + hi) / 2; if (a[m] == s) break; else if (a[m] > s) hi = m - 1; else lo = m + 1; 28. 아래프로그램의실행결과는무엇인가? c = 0; for (i = 1; i <= 30; i++) { d = 0; for (j = 1; j <= i; j++) { if ( (i % j)!= 0) d++; if (i == d + 3) c++; printf("%d\n", c);
[29-30] 아래와같은함수 f 가있다. int f(int a, int b, int m) { int r; if (b == 0) return 1; r = f(a, b / 2, m); r = (r * r) % m; if (b % 2 == 1) r = (r * a) % m; return r; 29. f(2, 3, 9) 의결과값은무엇인가? 30. f(3, 15, 10) 의결과값은무엇인가? [31-32] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 1부터연속적으로번호가붙어있는스위치들이있다. 스위치는켜져있거나꺼져있는상태이다. < 그림 1> 에스위치 8개의상태가표시되어있다. 1 은스위치가켜져있음을, 0 은꺼져있음을나타낸다. 그리고학생몇명을뽑아서, 학생들에게스위치개수이하인자연수를하나씩나누어주었다. 학생들은자기가받은수와같은번호가붙은스위치를중심으로좌우가대칭이면서가장많은스위치를포함하는구간을찾아서, 그구간에속한스위치의상태를모두바꾼다. 이때구간에속한스위치개수는항상홀수가된다. 예를들어 < 그림 1> 에서학생이 3을받았다면, 3번스위치를중심으로 2번, 4번스위치의상태가같고 1번, 5번스위치의상태가같으므로, < 그림 2> 과같이 1번부터 5번까지
스위치의상태를모두바꾼다. 만약 < 그림 1> 에서학생이 4 를받았다면, 3 번, 5 번스위치 의상태가서로다르므로 4 번스위치의상태만바꾼다. < 그림 1> < 그림 2> 입력으로스위치들의처음상태가주어지고, 각학생이받은수가주어진다. 학생들이입 력되는순서대로자기가받은수에따라스위치의상태를바꾸었을때, 스위치들의마지막 상태를출력하는프로그램을작성하시오. 입력형식 입력파일의이름은 INPUT.TXT이다. 첫째줄에는스위치개수가주어진다. 스위치개수는 100 이하인양의정수이다. 둘째줄에는각스위치의상태가주어진다. 켜져있으면 1, 꺼져있으면 0이라고표시하고사이에빈칸이하나씩있다. 셋째줄에는학생수가주어진다. 넷째줄부터마지막줄까지한줄에하나씩각학생이받은수가주어진다. 학생이받은수는스위치개수이하인양의정수이다. 출력형식 출력파일의이름은 OUTPUT.TXT이다. 스위치의상태를 1번스위치에서시작하여마지막스위치까지한줄에 20개씩출력한다. 예를들어 21번스위치가있다면이스위치의상태는둘째줄맨앞에출력한다. 켜진스위치는 1, 꺼진스위치는 0으로표시하고, 스위치상태사이에빈칸을둔다. 입력과출력의예 입력 (INPUT.TXT) 8 0 1 1 1 0 1 0 1 1 3
출력 (OUTPUT.TXT) 1 0 0 0 1 1 0 1 프로그램 #include <stdio.h> int n, m; bool s[101]; void operation(int x) { int i, temp; if ( < ) temp = ; else temp = ; for (i = 1; i <= temp; i++) { if (s[x + i]!= s[x - i]) break; s[x] =!s[x]; int main() { int i, a; FILE * fin = fopen("input.txt", "r"); FILE * fout = fopen("output.txt", "w"); fscanf(fin, "%d", &n);
for (i = 1; i <= n; i++) { fscanf(fin, "%d", &a); if (a == 1) s[i] = true; else s[i] = false; fscanf(fin, "%d", &m); for (i = 1; i <= m; i++) { fscanf(fin, "%d", &a); operation(a); for (i = 1; i <= n; i++) { if (s[i]) fprintf(fout, "1 "); else fprintf(fout, "0 "); if (i % 20 == 0 && i!= n) fprintf(fout, "\n"); fprintf(fout, "\n"); fclose(fin); fclose(fout); return 0; 31. ᄀ, ᄂ에들어갈내용은각각무엇인가?
32. 다음중ᄃ에들어갈수없는내용은무엇인가? 1 s[x + i] =!s[x + i]; 2 s[x + i] =!s[x - i]; s[x - i] =!s[x - i]; s[x - i] = s[x + i]; 3 s[x + i] =!s[x + i]; 4 s[x + i] =!s[x - i]; s[x - i] = s[x + i]; s[x - i] =!s[x - i]; 5 s[x + i] =!s[x - i]; s[x - i] =!s[x + i]; [33-35] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 정보초등학교학생회장후보는일정기간동안전체학생의추천에의하여정해진수만큼선정된다. 그래서학교홈페이지에추천받은학생의사진을게시할수있는사진틀을후보의수만큼만들었다. 추천받은학생의사진을사진틀에게시하고추천받은횟수를표시하는규칙은다음과같다. ( 규칙 1) 학생들이추천을시작하기전에모든사진틀은비어있다. ( 규칙 2) 어떤학생이특정학생을추천하면, 추천받은학생의사진이반드시사진틀에게시되어야한다. ( 규칙 3) 비어있는사진틀이없는경우에는현재까지추천받은횟수가가장적은학생의사진을삭제하고, 그자리에새롭게추천받은학생의사진을게시한다. 이때, 현재까지추천받은횟수가가장적은학생이두명이상일경우에는게시된지가장오래된사진을삭제한다. ( 규칙 4) 현재사진이게시된학생이다른학생의추천을받은경우에는추천받은횟수만증가시킨다. ( 규칙 5) 사진틀에게시된사진이삭제되는경우에는해당학생이추천받은횟수는 0으로바뀐다. 후보의수즉, 사진틀의개수와전체학생의추천결과가추천받은순서대로주어졌을때, 최종후보가누구인지결정하는프로그램을작성하시오. 입력형식 입력파일의이름은 INPUT.TXT 이다. 첫째줄에는사진틀의개수를나타내는자연수가 주어진다. 둘째줄에는전체학생의총추천횟수가주어지고, 셋째줄에는추천받은학생
을나타내는번호가빈칸하나를사이에두고추천받은순서대로주어진다. 단, 사진틀의 개수는 20 개이하이고, 총추천횟수는 1000 번이하이다. 학생을나타내는번호는 1 부터 100 까지의자연수이다. 출력형식 출력파일의이름은 OUTPUT.TXT 이다. 사진틀에사진이게재된최종후보의학생번호 를빈칸을사이에두고출력한다. 단, 출력순서는상관없다. 입력과출력의예 입력 (INPUT.TXT) 3 9 2 1 4 3 5 6 2 7 2 출력 (OUTPUT.TXT) 2 7 6 프로그램 #include <stdio.h> int main() { int student[20], vote[20], time[20]; int n, m, k; int s; int i, j, t; bool exist; FILE * fin = fopen("input.txt", "r"); FILE * fout = fopen("output.txt", "w"); fscanf(fin, "%d", &n); fscanf(fin, "%d", &k);
m = 0; for (i = 0; i < k; i++) { fscanf(fin, "%d", &s); exist = false; for (j = 0; j < m; j++) { if (student[j] == s) { vote[j]++; exist = true; break; if (!exist) { if ( ) { j = m; else { j = 0; for (t = 1; t < m; t++) { if (vote[t] < vote[j] (vote[t] == vote[j] && time[t] < time[j])) j = t; student[j] = s; vote[j] = 1; ; for (i = 0; i < m; i++) {
if (i < m - 1) fprintf(fout, "%d ", student[i]); else fprintf(fout, "%d\n", student[i]); fclose(fin); fclose(fout); return 0; 33. ᄀ에들어갈내용은무엇인가? 34. ᄂ에들어갈내용은무엇인가? 35. 위프로그램에서 m++; 이들어가야할곳은? <Visual Basic 사용자용문제 > 문제나프로그램내에명시되지않은변수와배열은모두 Integer 형이다. 16. 아래프로그램의실행결과는무엇인가? c = 0 For i = 1 To 10 c = c + 1 Next i Debug.Print c
17. 아래프로그램의실행결과는무엇인가? c = 1 For i = 0 To 5 c = c * i Next i Debug.Print c 18. 아래프로그램의실행결과는무엇인가? c = 0 For i = 7 To 62 Step 6 c = c + 1 Next i Debug.Print c 19. 다음은어떤프로그램의일부이다. 다음부분이실행된뒤 s 의값은? s = 1 For i = 1 To 2008 If s < 5 Then s = s * 2 Else s = s - 5 End If Next i
20. 다음은 1 에서 100 까지소수의개수를구하는프로그램이다. cnt = 0 For i = 2 To 100 prime = 1 j = 2 While ᄀ If (i Mod j) = 0 Then prime = 0 j = j + 1 Wend cnt = cnt + prime Next i Debug.Print cnt 다음중ᄀ에들어갔을때올바른답이출력되지않는것은? [21-22] A 라는배열에아래와같이값이담겨있다. 이배열을아래프로그램으로처리하려고할때물음에답하라. For i = 2 To 6 For j = i To 2 Step -1 If A(j) > A(j - 1) Then Exit For t = A(j): A(j) = A(j - 1): A(j - 1) = t Next j Next i... ᄀ 21. ᄀ으로표시된줄은총몇번수행되는가?
22. 배열 A[1] 부터 A[6] 에다음과같이 6 개의수가들어있을때, ᄀ의줄이수행되는횟수 가가장적은것은? 1 6, 5, 4, 3, 2, 1 2 6, 1, 2, 3, 4, 5 3 2, 3, 1, 4, 5, 6 4 4, 2, 1, 3, 5, 6 5 1, 2, 6, 5, 4, 3 [23-25] 직사각형모양의색종이두장이책상위에놓여있다. 두색종이의크기는서로다를수있고, 각각의색종이의변들중적어도하나씩은책상모서리와평행하다. 책상의모서리를 x축으로놓고좌표평면을만들면색종이의왼쪽아래좌표와색종이의오른쪽위좌표로하나의색종이의위치를표현할수있다. y (x4, y4) (x2, y2) (x3, y3) (x1, y1) (0, 0) x 첫번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x1, y1), (x2, y2) 로주어지고, 두번째색종이의왼쪽아래좌표와오른쪽위좌표가각각 (x3, y3), (x4, y4) 로주어진다. 이때두직사각형이겹치는지를판별하는프로그램을작성하려고한다. 모서리만닿거나꼭지점만닿는경우는겹치는경우가아닌것으로하자. Function intersects(x1, y1, x2, y2, x3, y3, x4, y4) As Integer If x4 ᄀ x1 Or x3 ᄂ x2 Then intersects = 0 ' 겹치지않는다. ElseIf y4 ᄀ y1 Or y3 ᄂ y2 Then intersects = 0 ' 겹치지않는다. Else intersects = 1 End If End Function 23. ᄀ에들어갈연산자는무엇인가?
24. ᄂ에들어갈연산자는무엇인가? 25. intersects(1, 1, 5, 5, 1, 2, 3, 4) + 2 * intersects(1, 1, 4, 4, 2, 2, 3, 3) 의결과값 은? 26. 아래프로그램의실행결과는무엇인가? Dim cnt As Integer Sub test(n) If n <= 1 Then cnt = cnt + 1 Else Call test(int(n / 2)) Call test(int(n / 2)) End If End Sub Sub main() cnt = 0 Call test(100) Debug.Print cnt End Sub 27. 아래프로그램이실행된뒤 lo, hi 의값은? N = 10 a(0) = 1: a(1) = 3: a(2) = 4: a(3) = 7: a(4) = 8 a(5) = 9: a(6) = 11: a(7) = 13: a(8) = 14: a(9) = 16 s = 4 lo = 0: hi = N - 1 Do While lo <= hi m = Int((lo + hi) / 2)
If a(m) = s Then Exit Do ElseIf a(m) > s Then hi = m - 1 Else lo = m + 1 End If Loop 28. 아래프로그램의실행결과는무엇인가? c = 0 For i = 1 To 30 d = 0 For j = 1 To i If (i Mod j) <> 0 Then d = d + 1 Next j If i = d + 3 Then c = c + 1 Next i Debug.Print c [29-30] 아래와같은함수 f 가있다. Function f(a, b, m) As Integer If b = 0 Then f = 1 Else r = f(a, int(b / 2), m) r = (r * r) Mod m If b Mod 2 = 1 Then r = (r * a) Mod m f = r End If End Function
29. f(2, 3, 9) 의결과값은무엇인가? 30. f(3, 15, 10) 의결과값은무엇인가? [31-32] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 1부터연속적으로번호가붙어있는스위치들이있다. 스위치는켜져있거나꺼져있는상태이다. < 그림 1> 에스위치 8개의상태가표시되어있다. 1 은스위치가켜져있음을, 0 은꺼져있음을나타낸다. 그리고학생몇명을뽑아서, 학생들에게스위치개수이하인자연수를하나씩나누어주었다. 학생들은자기가받은수와같은번호가붙은스위치를중심으로좌우가대칭이면서가장많은스위치를포함하는구간을찾아서, 그구간에속한스위치의상태를모두바꾼다. 이때구간에속한스위치개수는항상홀수가된다. 예를들어 < 그림 1> 에서학생이 3을받았다면, 3번스위치를중심으로 2번, 4번스위치의상태가같고 1번, 5번스위치의상태가같으므로, < 그림 2> 과같이 1번부터 5번까지스위치의상태를모두바꾼다. 만약 < 그림 1> 에서학생이 4를받았다면, 3번, 5번스위치의상태가서로다르므로 4번스위치의상태만바꾼다. < 그림 1> < 그림 2>
입력으로스위치들의처음상태가주어지고, 각학생이받은수가주어진다. 학생들이입 력되는순서대로자기가받은수에따라스위치의상태를바꾸었을때, 스위치들의마지막 상태를출력하는프로그램을작성하시오. 입력형식 입력파일의이름은 INPUT.TXT이다. 첫째줄에는스위치개수가주어진다. 스위치개수는 100 이하인양의정수이다. 둘째줄에는각스위치의상태가주어진다. 켜져있으면 1, 꺼져있으면 0이라고표시하고사이에빈칸이하나씩있다. 셋째줄에는학생수가주어진다. 넷째줄부터마지막줄까지한줄에하나씩각학생이받은수가주어진다. 학생이받은수는스위치개수이하인양의정수이다. 출력형식 출력파일의이름은 OUTPUT.TXT이다. 스위치의상태를 1번스위치에서시작하여마지막스위치까지한줄에 20개씩출력한다. 예를들어 21번스위치가있다면이스위치의상태는둘째줄맨앞에출력한다. 켜진스위치는 1, 꺼진스위치는 0으로표시하고, 스위치상태사이에빈칸을둔다. 입력과출력의예 입력 (INPUT.TXT) 8 0 1 1 1 0 1 0 1 1 3 출력 (OUTPUT.TXT) 1 0 0 0 1 1 0 1 프로그램 Dim n, m As Integer Dim s(100) As Boolean Sub operation(x)
Dim i, temp As Integer If < Then temp = Else temp = End If For i = 1 To temp If s(x + i) <> s(x - i) Then Exit For Next i End Sub s(x) = Not s(x) Sub main() Dim i, a As Integer Open "INPUT.TXT" For Input As #1 Open "OUTPUT.TXT" For Output As #2 Input #1, n For i = 1 To n Input #1, a If a = 1 Then s(i) = True Else s(i) = False End If Next i Input #1, m For i = 1 To m Input #1, a Call operation(a) Next i For i = 1 To n
If s(i) Then Print #2, 1; Else Print #2, 0; End If If i Mod 20 = 0 And i <> n Then Print #2, End If Next i Print #2, Close #1 Close #2 End Sub 31. ᄀ, ᄂ에들어갈내용은각각무엇인가? 32. 다음중ᄃ에들어갈수없는내용은무엇인가? 1 s(x + i) = Not s(x + i) 2 s(x + i) = Not s(x - i) s(x - i) = Not s(x - i) s(x - i) = s(x + i) 3 s(x + i) = Not s(x + i) 4 s(x + i) = Not s(x - i) s(x - i) = s(x + i) s(x - i) = Not s(x - i) 5 s(x + i) = Not s(x - i) s(x - i) = Not s(x + i)
[33-35] 아래와같은문제를해결하기위해프로그램을작성하였다. 물음에답하여라. 문제 정보초등학교학생회장후보는일정기간동안전체학생의추천에의하여정해진수만큼선정된다. 그래서학교홈페이지에추천받은학생의사진을게시할수있는사진틀을후보의수만큼만들었다. 추천받은학생의사진을사진틀에게시하고추천받은횟수를표시하는규칙은다음과같다. ( 규칙 1) 학생들이추천을시작하기전에모든사진틀은비어있다. ( 규칙 2) 어떤학생이특정학생을추천하면, 추천받은학생의사진이반드시사진틀에게시되어야한다. ( 규칙 3) 비어있는사진틀이없는경우에는현재까지추천받은횟수가가장적은학생의사진을삭제하고, 그자리에새롭게추천받은학생의사진을게시한다. 이때, 현재까지추천받은횟수가가장적은학생이두명이상일경우에는게시된지가장오래된사진을삭제한다. ( 규칙 4) 현재사진이게시된학생이다른학생의추천을받은경우에는추천받은횟수만증가시킨다. ( 규칙 5) 사진틀에게시된사진이삭제되는경우에는해당학생이추천받은횟수는 0으로바뀐다. 후보의수즉, 사진틀의개수와전체학생의추천결과가추천받은순서대로주어졌을때, 최종후보가누구인지결정하는프로그램을작성하시오. 입력형식 입력파일의이름은 INPUT.TXT이다. 첫째줄에는사진틀의개수를나타내는자연수가주어진다. 둘째줄에는전체학생의총추천횟수가주어지고, 셋째줄에는추천받은학생을나타내는번호가빈칸하나를사이에두고추천받은순서대로주어진다. 단, 사진틀의개수는 20개이하이고, 총추천횟수는 1000번이하이다. 학생을나타내는번호는 1부터 100까지의자연수이다. 출력형식 출력파일의이름은 OUTPUT.TXT 이다. 사진틀에사진이게재된최종후보의학생번호 를빈칸을사이에두고출력한다. 단, 출력순서는상관없다.
입력과출력의예 입력 (INPUT.TXT) 3 9 2 1 4 3 5 6 2 7 2 출력 (OUTPUT.TXT) 2 7 6 프로그램 Sub main() Dim student(20), vote(20), time(20) As Integer Dim n, m, k As Integer Dim s As Integer Dim i, j, t As Integer Dim exist As Boolean Open "INPUT.TXT" For Input As #1 Open "OUTPUT.TXT" For Output As #2 Input #1, n Input #1, k m = 0 For i = 1 To k Input #1, s exist = False For j = 1 To m If student(j) = s Then vote(j) = vote(j) + 1 exist = True Exit For End If
Next j If Not exist Then If Then j = m + 1 Else j = 1 For t = 2 To m If vote(t) < vote(j) Or (vote(t) = vote(j) And time(t) < time(j)) Then j = t End If Next t End If student(j) = s vote(j) = 1 End If Next i For i = 1 To m If i < m Then Print #2, student(i); Else Print #2, student(i) End If Next i Close #1 Close #2 End Sub
33. ᄀ에들어갈내용은무엇인가? 34. ᄂ에들어갈내용은무엇인가? 35. 위프로그램에서 m = m + 1 이들어가야할곳은?
2008 시도예선초등부정답 35.