zeniz   4년 전

원소의 집합을 A, n항의 원소를 An, 원소의 갯수를 n 평균을 Ave 라 할 경우, 이를 구하는 방법은 2가지가 있습니다.

case 1:

Ave = Sum(A) / n

case 2:

Ave = ∑ (1, n) { An / n }


case 1 로 이 문제를 풀 경우, case 2에 비해 연산이 한단계 많아지는데도 불구하고, 이 문제의 정답을 계산하는 방법으로 제시되었고,

case 2 의 경우는 소수점 반올림 문제로 인하여, 약간의 오차로 인해 이 문제의 정답과 다르다고 나옵니다.

이런 경우에는 위의 2개의 case를 모두 사용해도 문제가 없는 데이터로 코드를 확인하는 것이 맞는 것일겁니다.

또는, 미리 case 1의 방법으로 평균을 구하라고 공지를 해두는것이 당연합니다.

지금 이 문제를 풀었던 저의 시간을 20분간 날렸으니,

저와 같이 이 문제에 걸렸던 사람들 수 x 20분의 시간을 낭비시키는 것에 문제를 제기합니다.

djm03178   4년 전

"이런 경우에는 위의 2개의 case를 모두 사용해도 문제가 없는 데이터로 코드를 확인하는 것이 맞는 것일겁니다."

처음부터 문제가 실수오차를 고려하지 않은 채로 만들어진 것을 탓할 수는 있겠으나, 두 방법 모두가 맞는 데이터로만 확인해야 한다는 의견에는 동의할 수 없습니다. 문제는 그 문제 자체로서 존재하는 것이고, 실수오차에 민감한 것도 문제의 일부인데, 왜 실수오차에 대해 모르는 사람들도 다 맞게 해줘야 하나요?


"또는, 미리 case 1의 방법으로 평균을 구하라고 공지를 해두는것이 당연합니다."

전혀 당연하지 않습니다. 실수오차도 엄연히 프로그래밍을 하는 데에 있어서 알아야 할 부분 중 하나이고, 이 문제가 그에 대한 지식을 요구하는 것이라면 그걸 몰라서 틀리는 건 푸는 사람의 실력이 부족한 탓이지, 그런 사람들을 위해 공지를 해야 할 이유는 전혀 없습니다.

jh05013   4년 전

  1. case 1이 case 2보다 2배 적은 연산을 사용합니다. case 2에는 나누는 과정이 n번 들어가기 때문입니다.
  2. 특정 데이터에 대해 잘못된 답을 낸다면 그 풀이는 잘못된 풀이입니다. 채점 데이터는 잘못된 풀이를 걸러낼 수 있어야 합니다. 잘못된 풀이이므로 이것을 공지해야 할 이유도 없습니다.

20분 낭비하신 게 아니라, 20분 동안 소수 연산의 중요한 성질을 하나 배웠다고 생각해 주셨으면 좋겠습니다.

댓글을 작성하려면 로그인해야 합니다.