java 랑 cpp 이랑 시간체크 똑같이 되는것같아요.....

  • ojoono
    ojoono

    아무래도 java 가 cpp 보다 느릴수 밖에 없는데 시간체크를 똑같이 하는것같아요....

    똑같은 알고리즘인데 java 일경우엔 시간 초과나고 cpp 로 제출하면 통과되네요...

    java 로 풀려면 살짝방심하면 시간초과네요;;;;

    zeroone 이나 tpath 는 겨우 통과시켰는데 naming 은 gg;;;;;;

    물론 제가 알고리즘을 잘못해서 속도가 안나오는것도 있겠지만....

    같은 알고리즘인데 언어차이때문에 cpp 는 통과되고 java 는 통과안되는건 좀 아닌것같아요....


    12년 전
10개의 댓글이 있습니다.
  • Being
    Being

    제 생각에는, C++과 Java 정도만 지원한다면 그럭저럭 쓸만한 규칙을 만들어 낼 수 있을 것 같다는 생각이 듭니다. 예를 들어 PKU Online Judge 가 선택한 것과 같은 정책을 도입할 수 있겠지요.

    그러나 당연하지만, 언어/환경간에 절대적인 시간 제한의 비율이란 있을 수 없습니다. 이 문제는 다양한 언어를 지원하는 AOJ 같은 경우에 더더욱 문제가 되지요. 실제로 SPOJ 같은 경우 다양한 언어를 지원하지만 수행 시간 제한에는 차이를 두지 않습니다.

    결과적으로는 그러한 이유로 프로그래밍 대회에서 Java 사용자들의 비율이 매우 낮은 것이기도 하고요..

    다른 분들도 좋은 의견이 있으시면 논의해 보았으면 좋겠습니다.


    12년 전 link
  • Being
    Being

    논의에 도움이 되도록 POJ의 기준을 알려드리자면, 자바는 테스트케이스당 추가 110ms와 전체 수행 시간으로 3배를 줍니다.


    12년 전 link
  • imyoyo
    imyoyo

    저는.. AOJ에서는 문제를 하나도 안풀었으나 곧 풀것이므로ㅎㅎ 한마디 남길께요.

    저는 비교적 오래 자바로 문제를 풀어온 편이라 한계점을 많이 느껴왔습니다. 그래서 POJ에서는 자바로 풀어왔음에도 불구하고, ICPC나 탑코더에서는 C++로 계속 사용해 왔습니다. 왜냐하면 현실적으로 ICPC등의 대회나 각종 Judge들에서 Java의 핸디캡을 감당할만한 여건이 안된다고 판했거든요. 시간제한이 C++을 썼을때 가능한 시간으로 타이트하게 잡혀버리면 Java로 풀기가 곤란합니다.
    두가지 방법을 생각해볼수 있을거같아요.

    A. POJ처럼 언어에 따라 차등을 둔다.
    B. C++외에 다른 언어를 사용해도 충분할 만큼의 시간을 할당한다.

    A방법은 자바를 선호하는 저로서는 마음이 편하고ㅎㅎ POJ를 써온걸 생각하면 납들할만 방법인 것 같습니다. 하지만 다른언어도 지원할 수 있을텐데 언어의 특성을 결정하는게 쉽지는 않을것 같네요. 자바라고 해서 모든 면이 C++보다 느린것도 아니고요.

    B방법은 코드잼이나 탑코더를 생각하면 될 것 같습니다. 코드잼은 언어의 핸디캡이 거의 없을만큼 시간을 충분히 주는 편이라 자바로 해도 큰 어려움은 없는 편입니다.
    탑코더에 나오는 문제도 거의 그런편인것 같습니다. 탑코더에서는 계속 C++을 써오다가 몇 달 전부터 완전히 Java로 전향했는데요, 아직까진 레이팅이 떨어지는 것 말고 크게 어려움은 없었습니다(...)


    12년 전 link
  • JongMan
    JongMan

    오.. 김솬 ㅋ 파이썬이나 루비라면 모를까, 요즘 자바가 더 느리다고는 생각하지 않습니다. ^^; NAMING에서 특히 문제가 되는 것은 JVM 스타트업 타임이 500ms 의 상당시간을 잡아먹기 때문인 것 같고요. 하여간 제 생각에도 좋은 방법은 B입니다만 (빠른 언어로 작성된 느린 알고리즘을 맞게 하는 것이, 느린 언어로 작성된 빠른 알고리즘을 틀리게 하는 것보다 낫다고 생각합니다) 제가 모든 문제의 시간 제한을 정하는 게 아니라 쉽지 않군요. ^^;

    일단은 AOJ 에서도 언어별로 가변 시간을 줄 수 있는데, 정책을 어떻게 할 지 고민해 보겠습니다. :-)


    12년 전 link
  • JongMan
    JongMan

    아 글고 탑코더는 아예 출제시에 레퍼런스 솔루션을 자바로 짜야 하는 것으로 알고 있습니당. 'ㅅ'


    12년 전 link
  • Being
    Being

    저는 개인적으로 사실 어떤 도구를 사용할 지 결정하는 것도 프로그래머의 역량이라면, 그냥 빠른 언어를 쓰는 게 맞다고 생각합니다. 문제의 시간 제한이 넉넉하다면 유연한 언어로 짧고 간결한 구현을 하고, 타이트하다면 C++로 구현하겠지요. GCJ에서 택하는 전략과 마찬가지가 아닐까 싶습니다.


    12년 전 link
  • Being
    Being

    다만 자바 정도면 패스하게 해야 할 것 같은데, JVM 스타트업 타임이 문제라면 좀 안타깝긴 하네요..


    12년 전 link
  • imyoyo
    imyoyo

    참.. 자바도 C++스럽게(?) 사용하면 상당히 빠릅니다. 작은 예를 들면 stl의 vector[int]와 자바의 ArrayList[Integer]는 기능은 동일하지만 ArrayList가 구조상 상수배ㅡ.ㅡ 느립니다. 하지만 배열(int[])을 쓰면 C++과 거의 차이가 없습니다.
    기타 등등의 이유로 자바를 자바스럽게 쓰면 C++보다 느리다. 라고 말하고 싶어요.. 파이썬이나 루비도 마찬가지일거라고 생각이 들어요.


    12년 전 link
  • imyoyo
    imyoyo

    그래서 만약 자바를 C++처럼 써야 맞을 수 있다면 저는 굳이 자바를 쓰지 않을거에요. 그러니까 저는 별로 문제가 없다고도 할수있으나ㅡ.ㅡ;
    요즘은 C++을 배우지 않는 대학도 많고 파이썬등의 스크립트 언어으로 프로그래밍에 입문하는 사람도 많은 걸로 알고 있어요.
    그래서 도구에 대해서는 좀 더 생각해볼 필요가 있는 것 같습니다..


    12년 전 link
  • Being
    Being

    저는 간단하고 쉽게 풀 수 있으며 수행 시간에 영향이 없다 싶으면 루비로, 그렇지 않으면 C++로 풀고 있습니다.


    12년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.