jh05013   2년 전

아래 코드를 로컬에서 실행시켰을 때는 평균 1.6초 가량이 나오고 2초를 넘지 않는데, BOJ Stack과 BOJ에서는 최대 4.8초까지 갑니다. 심지어 돌릴 때마다 2초부터 4초까지 제각각입니다.

tio.run, 앳코더, 코드포스 등 다양한 곳에서 실행시켜 보았지만 4초를 넘기는 곳은 없었습니다.

startlink   2년 전

실행해보기 편한 tio.run 에서 약 33회 실행해봤는데 2.53초 부터 4.034초까지 나오는 것을 확인했습니다.

pypy는 pypy.org 에서 다운받은 바이너리 파일을 별도의 수정을 가하지 않고 바로 실행하고 있습니다. BOJ의 채점 서버 이외의 다른 환경에서도 오차가 발생하는 것은 어쩔 수 없을 것 같습니다.

로컬은 아마 여러 사이트의 실행 서버보다 CPU가 좋을 것으로 추정되어서 오차가 적을 것이라 생각되고, 각자의 서버 성능이 다르니 여러 곳과의 직접적인 비교도 어려울 것 같습니다.

다른 곳의 서버 성능은 알지 못하지만, BOJ는 일관성이 중요하다 생각되어 CPU Burst 기능이 없는 CPU를 AWS에서 사용하고 있습니다. 서버의 성능을 바꾸지 않고 별도의 처리로 PyPy 속도를 빠르게 하는 방법을 현재는 모르겠습니다.

이번 기회에 TLE와 관련된 채점 방식을 수정하는 것이 좋다고 생각하는데, 다음에 대해서 @jh05013 님과 이 글을 보는 다른 분들의 의견이 궁금합니다.

  • 시간 제한을 min(TL*2, TL+5)로 놓고 채점하고, TLE가 발생한 경우 2-3번 정도 더 실행해 추가 실행한 횟수가 모두 TLE인 경우만 TLE 처리 (모든 언어)

추가로 Python과 PyPy에 대해서 다음에 대해서는 어떻게 생각하는지 궁금합니다.

  1. Python 3을 기본 언어에서 제외하고, PyPy3만 남김
  2. Python 3을 선택시 PyPy3을 사용하는 것이 좋다는 문구를 보여줌 
  3. PyPy3의 이름을 Python 3 (PyPy), Python3의 이름을 Python 3 (CPython) 으로 바꿈

jh05013   2년 전

두세 번 반복 실행하는 것은 좋은 방법 같습니다.

Python 3을 삭제할 필요는 없을 것 같고 (Python 3가 더 빠른 경우도 가끔씩 있던 것으로 기억합니다), 문구는 좋은 방법이라고 생각합니다. 3번에 대해서는 잘 모르겠습니다.

hun3555   2년 전

2-3번 반복 실행해 모두 TLE인 경우만 TLE 처리하는 것과 PyPy3을 사용하는 것이 좋다는 문구를 보여주는 것에 찬성합니다.

재귀 호출이 많은 코드의 경우 Python 3이 PyPy3보다 빠른 경우가 있었던 것으로 기억합니다. (제출 번호 35494447과 35494443, 제출 번호 35427223과 35623130는 같은 코드를 각각 Python 3이랑 PyPy3으로 제출한 것인데, Python 3이 실행 시간이 더 빠릅니다)

언어 이름을 바꾸는 것도 나쁘지는 않을 것 같은데, 제가 이미 익숙해진 상태여서 그런가 잘 모르겠네요. 오히려 헷갈려 하시는 분들이 나올 수도 있을 것 같다는 생각이 듭니다.

ai4youej   2년 전

Pypy3만 남기는 경우 일부 모듈의 일부 함수를 사용할 수 없게 됩니다. (대표적으로 현재는 math.comb 함수를 Pypy3에서는 사용할 수 없습니다.)

그런 의미에서 1번은 반대하고, 2번은 좋은 방법이라고 생각합니다.

3번은 위에 hun3555님이 말한 것과 같이 헷갈려하시는 분들이 나올 수도 있으며, 초보자들분에게도 접근성이 더 유용할 거 같지도 않습니다.

startlink   2년 전

기본 언어에서 제외하는 것은 언어를 삭제하는 것이 아닙니다. 

기본 언어는 회원 가입하고 별도의 언어 설정을 수정하지 않은 상태에서 보여주는 언어를 의미합니다. 

아래 사진의 있는 것이 기본 언어입니다. 


jh05013   2년 전

Pypy3라는 이름이 파이썬 입문자에게 혼란을 줄 수 있을 것으로 예상됩니다.

startlink   2년 전

참고로 C++의 이름을 C++98, C의 이름을 C99로 바꾸었을 때는 큰 혼란은 없었습니다. 

startlink   2년 전

C 또는 C++이 없다는 문의는 2-3번 정도밖에 안왔습니다. 

hun3555   2년 전

Python3을 기본 언어에서 제외하고 Pypy3만 남긴다면 당연하게도 언어명을 Python3 (PyPy)와 Python3 (CPython)으로 수정할 필요가 있어보입니다.

언어명을 수정하지 않으면 초심자 분들에게 혼란을 줄 수 있다는 이유에서입니다.

다만 Python3을 기본 언어에서 제외하는 것에 반대하는데, 현재도 Python3에 여러 기능들이 추가되고 있는 것으로 알고 있고, 당연하게도 PyPy3의 개발이 이보다 느려서 지원되지 않는 기능들이 꽤 있는 것으로 압니다.

C++이나 C처럼 표준이 있는 것이 아니라 지속적으로 업데이트되고 있는 언어의 특징을 생각해보면 Python3도 남겨놔야 하지 않을까 싶습니다.

물론 기본 언어에서 제외한다고 해도 해당 언어로 제출할 수 있지만, 잘 모르는 경우 코드가 왜 동작하지 않는지 파악하기 힘든 경우가 생길 수 있을 것 같습니다.

추가로, Python 3을 선택했을 때 PyPy3를 사용하는 것이 좋다는 안내를 띄울 경우, PyPy3을 선택할 경우 Python3의 일부 최신 기능이 지원되지 않을 수 있다는 안내도 띄워주는 것이 어떨까 합니다.

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