변수 범위 실수-_- 엄청나네요

  • restart
    restart

    ANNIETIBBER문제를 3일에 걸쳐 풀었는데 결국 처음 답안에서 변수형만 바꾸면 해결되는 문제였네요-_-

    답 상한이 10^6 C 2 이라서 답안을 long long으로 잡았는데, 중간 계산 과정에서 변수를 int로 잡은 게 문제의 원인..

    3일간 알고리즘 정당성을 계속 살피고 그것도 모자라 입력데이터 생성기도 만들고 brute force답안과 비교도 했는데-_-..

    맞으니 좋은데 허탈함과 시간이 많이 아깝네요ㅠ_ㅠ 이럴땐 C++가 차라리 haskell처럼 엄청 깐깐하거나 python처럼 엄청 널널했음 좋겠다는 생각이 들어요-.-

    define int long long으로 코딩을 시작하는게 좋을런지..
    변수범위 실수를 어떻게 잘 잡아낼까요?ㅠㅠ


    10년 전
4개의 댓글이 있습니다.
  • Taeyoon_Lee
    Taeyoon_Lee

    답이 long long 일 것 같으면 애초에 웬만한 변수는 전부 long long으로 선언하는 좋은 방법이 있습니다. 만약 시간복잡도는 맞는 것 같은데 long long 때문에 TLE가 난다면, bottleneck으로 추정되는 부분만 int로 바꿔서 다시 시도!


    10년 전 link
  • wookayin
    wookayin

    저같은 경우는..

    • 증명하면서 코딩하기 습관을 기르면, integer overflow 가 발생할 가능성이 있는 부분을 조심해서 실수없이 넘어가는 훈련이 가능합니다.
    • 하지만 생각하기 귀찮으므로, 숫자가 4 \times 10^4를 넘어가면 일단 본능적으로 64bit 를 사용하려고 애씁니다. (2147483647^{0.5} = 4.6만 이기 때문에 그렇습니다)

    하지만 경험상 수많이 틀려보면서 뼛속 깊이 overflow 를 새기는 수밖에 없는것 같습니다..orz


    10년 전 link
  • cjkis
    cjkis

    #define 훼이크 너무 싫던데 MFC가 #define 퍼레이드로 더러워졌다고 봄


    10년 전 link
  • restart
    restart

    각 변수의 overflow를 예상하는 경지는 오르기 힘들 것 같고ㅠㅠ 4만 넘어가는 변수에 대해서 long long을 죄다 잡아버려야겠군요.. 친절한 답변 감사드립니다


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