* 쓰다 보니 너무 길게 써져서 2편으로 나누겠습니다. 사실 올해 정올 썰 풀려했는데;;

 

 

세줄요약

1. 작년에 엄청 설레서 정올 치러감.

2. 그런데 시험 치는데 몬가 좀 이상했음.

3. 엌ㅋㅋㅋㅋ 이게 올림피아드냐??? ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

KOI (물고기 아님) (작가 이름 아님)

 

작년, 디미고 입학 이후 꼭 한번 가보고 싶었던 정보올림피아드를 나갔었다.

그 당시, 말 그대로 배운 것도 거의 없는,

그냥 독학으로 딱 간단한 DP 짜는 법만 배운,

학교에서도 C언어 기초만 배운 정도의 상태에서 시험을 보러 갔다.

 

물론 그 당시까지만 해도 경시 예선에 프로그래밍 문제도 없어서

가벼운 마음으로, 그냥 시험을 치러 갔었다.

그런데...

 

https://namu.wiki/w/%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C#s-3.4

(나무_위키) 

 

 

작년 정올이 개똥이었다.

개인적으로 그 때 기억을 되살려서 그 때 어땠는지 대충 말해보겠다.

 

https://www.acmicpc.net/jungol/2018/3

작년 정올 문제와, 그에 대한 의견들 (이라고 쓰고 오류까기 댓글)

 

 

 

처음 시험장에 들어가서 시험을 보려고 할때 까지만 해도 마냥 설렜었다.

시험 당시의 작년도, 제작년도 문제들도 다 풀어봐서

그런 식으로 문제가 출제될 줄 알고,

또 그 정도로 재밌게 문제가 나올줄 알았다.

그리고 사실 처음에는 그렇다고 생각했다.

 

그런데

6번문제를 풀다보니 답이 안나오는 것이었다.

난 솔직히, 내가 잘못푼 줄 알았다.

어떻게 푸는지 몰라서 막 풀었는데

답이 안나오니 시간은 끌리고 답답해 죽겠고...

결국 그냥 내가 1 잘못 더했나보지 하고 5번을 체크하고 넘어갔었다.

그런데 시험 끝나고 보니까 그게 문제오류였다네??

정답이 없는게 맞다네??

 

아무튼... 그 당시엔 그런거 몰랐으니까 넘어가고

 

11번 문제.

"n 개의 수들을 가지고 완전 이진트리를 만들 경우 이 트리의 높이는 얼마인가?"

그 당시 기준 약 3개년 기출을 풀어보면서, 이런 문제는 처음 봤다.

2018년 당시 정보올림피아드는 일반인도 풀 수 있게 (전문 교육 안받아도 학교 교육으로도 풀 수 있게) 시험을 내겠다고 했다.

(난이도 개선) 경시대회 문제 난이도를 낮춰 구성하고, 보편적 공교율 기반의 코딩문제를 출제

그런데 지금까지 나온적도 없는 완전 이진트리 문제를 들고 왔다.

아까도 말했다시피, 나는 그 당시 완전 노베라 완전 이진트리가 뭔지 정확히도 몰랐다.

그래서 그냥 걸렀다. (나중에 또 나올 문제입니다.)

 

그리고 13번 문제.

보자마자 걸렀었다.

혹시 궁금할까봐 문제를 좀 써보자면,

 

"다음 표에서 X에 들어갈 수는 무엇인가?"

1 2 3 4 5
2 5 13 30  
3 13 42    
4 30   X  
5        

 

① 175  ② 235  ③ 280  ④ 344  ⑤ 388

 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

진짜 솔직히 거를만 하지 않았나 싶다.

애초에 사고력이 얼마나 좋은지 대결하는 시험에서

저딴 문제를 낸다고?

 

심지어 저거 문제 진짜 그대로 쓴거다.

특정 규칙이 있다는 말 하나 없이 저렇게 나왔다.

저러면 대체 답을 어떻게 구하라는 건가?

그냥 까놓고 말해서, 왼쪽 위와 오른쪽 아래가 대칭인 표라고 해도 할 말 없지 않나?

대충 숫자 몇개 넣어보다가 때려쳤다.

 

그럼 규칙이 명확하면 또 모른다.

1 1 2 3 5 8 13 21 X 55 ...

에서 X에 들어갈 숫자는? 

 

이렇게라도 냈으면 거의 다들 별 말 없이 진행했을 텐데,

저 위의 저 표는 대체 뭘 보고 유추하라는 건지 모르겠다.

 

백준님의 댓글을 인용하자면,

 

"의도한 정답은 다음과 같다고 합니다.

칸 (i, j)에 들어있는 수는 (1, 1) ~ (i, j) 에 있는 수의 합

즉, (3, 3)이 42가 나오는 이유는 1 + 2 + 3 + 2 + 5 + 13 + 3 + 13 입니다."

 

 

캬...

와... 정말 너무 명확하고 일반적인 규칙이었어요!!! 대단합니다!!

 

..쓰다보니 화나서 문제 하나에 너무 길게 써버린 것 같다.

아무튼 이런 문제를 보자마자 정말 기가 차고 놀라워서 그냥 때려치우고 다음 문제로 넘어갔다.

 

 

14번.

"n 개의 수들을 가지고 최대 이진 힙 데이터 구조를 만들 경우 높이 h 에 위치하는 노드들의 최대 수는?"

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 보편적 ㅋㅋㅋㅋㅋ 공교육ㅋㅋㅋㅋㅋㅋㅋ 무슨 안드로메다에서 공교육 받았나??

보편적 공교육에서는 최대 이진 힙 데이터 구조와 완전 이진 트리를 배우나 보다.

정말 난이도가 개선되고, 또 공교육을 받은 학생들도 정말 풀 만하게 나오지 않았는가?

역시 초중고교 현직 교사가 문제 출제 및 검수위원으로 참여해서 그런지 더 훌륭해 보인다.

(심지어 이 문제에는 다른 이슈도 있었는데 그건 나중에...)

 

 

 

아무튼, 계속 문제풀이를 진행했다.

이 뒤쯤부터는 C언어로 코딩한 것을 분석하거나 하는 문제였는데,

문제가 내가 지금껏 보던 문제들과는 달랐다.

 

원래 아까 말했다시피, 문제들이 다들 되게 재밌었다.

풀다 보면 빡치는 문제들도 있긴 했지만 변별력 문제들만 그랬고,

다른 문제들은 곰곰히 생각하며 푸는 문제들이었는데...

 

20번.

다음 프로그램 중 주어진 문자열의 길이를 정확하게 출력하는 것은?

int i;
char s[] = "hello";
for(i=0; s[i]; ++i);
printf("A: %d ", i);
i=0;
while(s[i++]);
printf("B: %d ", i);
return 0;

① A 만 옳은 값을 출력한다

② B 만 옳은 값을 출력한다

③ A,B 모두 옳은 값을 출력한다

④ 모두 옳은 값이 아니다

⑤ 컴파일 에러가 발생한다

 

21번.

다음 프로그램의 출력 결과는 무엇인가?

char    str[] = "Welcome";
char* s = str;
while(*s)
printf("%c", *s++);

① Welcome   ② elcome   ③ 0   ④ Wel   ⑤ come

이게 왜 어떠냐고?

들여쓰기가 보이는가?

필자가 들여쓰기를 안 한 것이 아니다.

그냥 문제가 진짜로 저렇게 나왔다.

 

세상에 대체 누가 저따구로 코딩을 하는가?

열심히 곰곰히 생각해서 푸는 문제가 아니라, 

그냥 헷갈리라고 막 던져놓은 문제다.

아니 애초에 저런 문제는 나도 만들 수 있다.

사고력을 시험하겠다면서 무슨 들여쓰기도 안한 코드를 문제로 내는가?

저런문제가 한둘이 아니다.

 

 

 

27번.

다음 프로그램의 출력 결과는 무엇인가?

int num, temp1, temp2;
int A = 2;
int B = 12;
num = ((temp1 = B / A++) + (temp2 = B / ++A)) + ++B;
printf(“%d”, num);

① 20  ② 21  ③ 22  ④ 23  ⑤ 24

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

뭐가 문젠지는 딱 봐도 알겠지만 대충 나열하자면...

 

1. 이게 사고력이랑 무슨 상관이며,

2. 전/후위 증가를 물어보는 문제라고 하더라도 저따구로 코딩하는 사람은 아무도 없으며,

3. 심지어는 undefined behavior이기 때문에 어떻게 결과값이 나올지는 아무도 모른다. 심지어, 컴파일러에 따라 값이 다르게 나온다!

= 문제 질이 쓰레기다

 

이쯤부터 나는 무언가가 잘못되었다고 느끼고 있었다.

그러던 와중, 정확한 시기는 기억 안나는데

대충 중반이었으니 이때쯤 아니었을까 싶다.

갑자기 방송으로 오타 및 오기 방송을 하기 시작했다.

 

처음에는 "어라? 오타가 좀 있나보네" 하는 눈치로 오타를 고치기 시작했는데...

 

진짜 양심에 손을 얹고, 10~20문제 가량에 오타가 있었다.

장난이나 과장이 아니다.

첫 5문제정도는 "와 오타 많네 ㅋㅋㅋㅋ" 이러고 있었는데,

10문제정도 되니깐 "????? 뭐지 애내들 시험지 검수 안했나?" 하는 생각이 들더라.

진짜 고치면서 웃겨서 웃었었다.

다시 말하지만, 이거 국가 공인 올림피아드다.

일개 쪽지시험도 오타가 이렇게 많게는 안나온다.

 

더 충격적인 사실이 무엇이냐면,

이렇게 고치고도 시험이 끝날때 까지 정정해 주지 않은 오타들이 수두룩 빽빽 했었다는 것이다.

진짜 이쯤되면 답이 없다.

 

 

28번.

다음 프로그램의 출력 결과는 무엇인가?

int a = 3;
if (a = 4)
   printf(“A”);
else
   printf(“B”);
if (a = 0)
   printf(“C”);
else
   printf(“D”);

① AD  ② AC  ③ BC  ④ BD  ⑤ CD

 

 

엥? 이게 왜 문제냐고?

나도 처음엔 왜 문젠지 몰랐다.

근데, if문 안을 자세히 보면...

 

대입 연산자를 넣어쳐놨다.

아니 그래서 이게 대체 사고력 향상이나 그런거에 어떤 의미가 있는걸까?

이건 그냥 코드를 한줄한줄 아주 정성스럽게 읽어서 풀라는 의미 아닌가?

그냥 누구 눈썰미가 더 예리한가

틀린그림찾기 시합이 아닌가?

사실 처음엔 그냥 BD인줄 알았다가, 나중에 검토하다 답을 알게 되었다.

이쯤되면 한국눈썰미올림피아드로 이름을 바꿔야 된다.

 

 

29번.

다음과 같이 함수 f를 구현했을 때, f(5,12)의 값은?

int f(int m, int n) {
  if(n<=0 && m<=0) {
    return 1;
  }
  else {
    if(n >= m)
      return f(n-2,m)+f(n-3,m);
    else
      return f(n,m-3);
  }
}

① 73  ② 74  ③ 75  ④ 76  ⑤ 77

 

이건 그냥 간단히 짚고 넘어가겠다.

2점짜리 문제다.

이게 위의 28번 문제와 배점이 동일하다.

문제의 난이도가 같다고, 아니면 엇비슷하기라도 하다고 생각하는가?

본인의 생각에 맡기겠다.

 

 

그리고 본인이 이 시험이 매우, 굉장히, 엄청나게 이상하단걸 깨달은 문제가 바로 36번 문제인데...

36번.

a=1, b=0, c=-1 일 때, 다음 프로그램의 출력 결과는 무엇인가?

int i = 5;
if(a<b<c){
for(i--; i--; i--)
   printf(“%d ”, i);
} else {
for(i--; --i; i--)
   printf(“%d ”, i);
}

① 4 2 0   ② 3 1 -1 -3 5 ...   ③ 3 1   ④ 4 2 0 -2 4 ...   ⑤ 5 3 1

 

필자는 이 문제를 풀면서 진짜 어이가 너무 없었다.

if (a<b<c)라는 말도 안되는 undefined behavior를 사용한다.

아니 무슨;;; 저딴 개짓거리를 누가 실무에서 쓰고

또 누가 알고리즘 문제에 쓰는지 정말 궁금하기만 할 따름이다.

 

거기다가, 누가 대체 for문 안에 저따구로 쳐 써넣는가?

for (i--; i--; i--)

이딴거 쓰는거 본적 있는가?

이것도 다른 거지같은 문제들과 마찬가지로, 정말 실무에서 쓰면 바로 쫓겨나고, 애초에 쓸 일도 없는 문법으로,

그냥 간단히 문법 어거지로 꼬아서 답이 뭐가 나오는지 물어보는 셈이다.

게다가 저 문제, 들여쓰기도 이상하지 않은가?

재차 말하지만, 필자의 오기가 아니라

진짜로 시험에서 들여쓰기를 저따구로 해서 나왔다.

 

근데 사실 진짜 문제는 그게 아니다. (그래서 더 웃긴거다 ㅋㅋㅋㅋㅋ)

사실 시험장에서 필자가 문제를 풀 때, 저 쯤 되니 그냥 그러려니 하고 넘어갔다.

(사실 이때쯤에는 해탈했다. 문제의 질부터 오타 수두룩빽빽한거 까지...)

 

저 문제를 풀면, 답은 3 1 -1 -3 -5 ..... 가 나온다.

그러면 저 5개의 답지중에 무엇이 정답이겠는가?

2번이라고?

좀만 더 자세히 보자.

2번은 3 1 -1 -3 5 라고 적혀 있다.

저것도 마찬가지로 필자가 낸 오타나 오기가 아니다.

진짜 시험지에 저렇게 적혀 있었다.

 

하...

 

이 문제로 필자는 시험장에서 감독관에게 이건 너무 확실히 오타가 아니냐고 물어보았으나,

돌아온 대답은 "대답할 수 없고, 추후에 이의신청을 넣으시기 바랍니다" 였다.

그리고 답안이 애초에 아니어서 검토를 안한 4번도 잘 보기 바란다.

4 2 0 -2 4 ...  라고 쓰여 있다.

아니 애초에 답이 될 수도 없는데 답지에는 왜 집어넣은걸까? 이게 진짜 의도였을까?

아 뭐 질문했는데 주최측에서는 문제 없다하니...

진짜 답도 없다는 생각을 했다.

그냥 문제 질부터 답까지 죄다 틀려먹은 문제다.

 

 

43번 문제도 의견이 조금 달려있는데, 필자는 딱히 생각없이 풀어서... 그냥 문제가 왜이렇게 더러운가 생각하며 풀었었다.

 

 

44번.

 

한 컴퓨터회사의 구성원은 사장 1명과 직원들로 구성되어 있고, 회사의 각 직원은 최대 3명까지의 부하직원을 둘 수 있다. {X, Y, Null}의 표현은 두 명의 부하직원 X와 Y가 있으며, 없는 경우는 Null로 나타낸다. 또한 부하직원이 하나도 없으면 {Null, Null, Null}로 나타낸다. 만일 그 컴퓨터회사 모든 직원의 조직도에서 Null의 총 개수가 10인 경우, 최소 직원 수는 몇 명인가? 단, 사장의 직속상관(바로위의 상관)은 없고, 직원들의 직속상관은 1명이다.

 

 

자, 자...

사장은 직원일까? 아닐까?

재밌는 점은, 사장을 직원으로 생각하면 문제의 답은 나오지 않는다.

그러므로, 사장은 직원이 아니다.

그러면 이쯤에서 의문이 생긴다.

사장 언급은 왜 한걸까?

사실 사장 언급 안해도 그냥 풀리는 문제를, 굳이 사장 언급을 해놓고 앉았다.

왜인지는... 나도 모르겠다. 문제를 꼬는 것도 아니고... 그냥 일부러 문제 애매하게 내는거에 맛들렸나?

 

 

 

이 이후부터는 솔직히 생각없이 막 풀어서 문제를 풀 때 아무 생각도 안했다.

사실 49번 문제는 풀기 귀찮아서 대충 풀고 거른 것도 있다.

 

 

 

아무튼 그렇게 시험을 마치고 집으로 돌아왔다.

처음 보는 정올 시험인데 이렇게 마치고 돌아온게 조금 짜증나고 억울한 면도 있었지만,

그래도 시험 마치고 돌아오는 길에는 기분이 어느 정도 괜찮았던 것 같다.

 

그리고 나서 대망의 답 공개일이 다가오고....

학교에서 친구들과 가채점용으로 써 온 답안지로 채점을 하게 되는데...

 

...쓰다 보니 너무 길어진 관계로 답 공개 이후는 2편에서 계속하도록 하겠다.

 

'잡담' 카테고리의 다른 글

크리스마스  (0) 2019.12.26
이미 어제 하나 썼던 기념) 2018 정보올림피아드 썰 - 2편  (4) 2019.05.05

+ Recent posts