ljhhasang   2년 전

아래 코드를 C++17로 제출시 메모리 초과가 발생합니다. 다른 로직 부분을 살펴보았지만 이상한 점이 보이지 않아 main 함수 내부를  수정해봤습니다.

int main(void) {
    int n;
    while (1) {
        cin >> n;
        if (n==0) break;
        solve(n);
    }
}

위와 같이 main함수를 수정하는 경우 2412KB에 156ms 로 제한조건 내로 맞았습니다!! 로 통과됩니다.

while 문 조건식에 탈출조건을 집어넣는 것과 while 문 내부에 별도로 탈출분기를 추가하는 것의 차이가 무엇인지

알고싶습니다.

zigui   2년 전

두 코드의 차이점은 solve(0)을 호출하는지 하지 않는지의 차이가 있어보이고, solve(0)은 재귀 호출을 무한히 많이 하게 되어 스택 오버플로우가 나는 것 같아 보입니다. 

추가로, 스택 오버플로우 에러가 메모리 초과로 판정되는 경우도 많이 있습니다.

ljhhasang   2년 전

와 생각치도 못했는데 ㅠㅠ 감사합니다!!

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