hoon3722   4년 전

27행 코드에 q가 비어있으면 break 써서 나오라고 명령을 안쓰면 왜 메모리 초과가 뜨는지 잘 모르겠습니다.

밑에 코드는 문제없이 정답으로 뜨는데 27행 28행 코드 안 써놓으면 메모리 초과 떠요.. 그냥 문제에 나와있는

건물 5개인 간단한 예제를 넣어도 말이죠..

아무리 확인해도 예제에 사이클이 없는 것 같은데.. 다른문제에서는 사이클 안 적어도 메모리 초과 전혀 안 떴는데

갑자기 이 문제에서 조건 몇개 추가해줬다고 메모리 추가 뜨는지.. ㅠㅠ
도와줘요 !!

bupjae   4년 전

1) 일단 이 프로그램에서 잘못된 점은 25번째 줄 반복문과 34번째 줄 반복문에서 같은 반복변수를 사용한 점 입니다.

   

2) 1번에서 언급한 오류 때문에 27~28번째 줄이 없으면 큐가 비어있는 상태에서 q.pop() 또는 q.front() 를 호출할 수 있습니다.

이러한 프로그램의 실행 결과는 정의되지 않았습니다. (undefined behavior)

undefined behavior를 일으키는 프로그램의 실행 결과는 전혀 예측할 수 없습니다. *대부분의 경우* 런타임 에러를 내뱉지만, 메모리 초과나 시간 초과, 틀렸습니다 등의 결과를 받는 것도 가능하며, 심지어 아주 우연히 맞았습니다 결과를 받을 수도 있습니다.

   

3) 이 문제는 그래프에 사이클이 있을 경우 어떻게 출력해야 하는지 설명하고 있지 않기 때문에, 아마도 사이클을 포함한 그래프는 주어지지 않을 걸로 추정됩니다.

만약 그렇다면, (1번에서 언급한 오류를 수정한다면) 큐가 비어있는지 여부를 체크할 필요가 없을 것으로 추정합니다.

hoon3722   4년 전

감사합니다.. 해결됬습니다.

직접 종이에 적어서 과정을보니 모든 건물을 다 들려서 끝나야하는데 25행에서 i값이 n을 못 넘고 계속 실행해서

q.front 나 q.pop에서 메모리 초과가 나는 것 이군요.

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