강의로 돌아가기
장현우

[참고하세요!]C++/Java 시간초과나 반 정도 틀릴때....

이번 문제 풀면서, 저 같은 경우 2시간 정도 소요됐는데, 오래 걸린 시간의 원인을 공유하고자 합니당 ^

제 생각에는 파이썬/자바스크립트를 제외하고 타입 시스템이 존재하는 언어를 사용하시는 분들은 저와 같은 에러를 만날 수 있을 것 같습니다.

여러분들의 알고리즘이 제대로 짜여졌다고 가정했을 때,
C++의 경우, unsinged long long 타입으로 solution의 반환형을 바꿔야 정상적으로 돌아갑니다. 왜냐하면 long long을 포함한 그 이하의 정수형일 경우, 입력이 엄청나게 커서 오버플로우가 발생하게 됩니다. 따라서, 입력이 작은 경우만 테스트케이스가 통과하고 나머지는 시간초과 혹은 오답이라고 판정이 나게 되죠. 그래서 문제 입력을 아래 코드처럼 바꿔주시면 됩니다.

unsigned long long solution(int n, vector<int> times) {
    unsigned long long answer = 0;
    //코드 작성
    return answer;
}

signed 형만 지원하는 자바 같은 언어는 BigInteger나 Long 보다 더 큰 정수형 혹은 실수형을 사용해야 할 것 같습니다.

  • SangJin Jeon
    감사합니다. c++ 에서 long 으로 바꿔도 마지막에 오류났었는데 그 문제였네요... SangJin Jeon 2018.12.28 16:34
  • 심승현
    그런데, 오류코드를 살펴보면 "int actual0 = sol.solution(~~)" 이런형식으로 int로 형변환이 강제되는데, long long만큼의 큰 return이 나오는 문제면.. 애초에 int형에 넣지않아야 하는거 아닌가요..? 심승현 2019.01.17 01:37
1 개의 답변
Demi

안녕하세요.
일부 언어에 초기코드가 int 타입 값을 리턴하도록 설정되어있었습니다.
현재는 초기코드에서 long long 타입 값을 리턴하도록 수정하였습니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.