specture258   1년 전

처음에 제출했던 답인데 런타임 에러(segmentation fault)가 뜨네요. 여기서 if문을 없애고 

while(q.size() !=1)로 바꿔서 제출하니까 정답으로 인정이 되더라고요. 

둘 다 컴파일러에서는 출력값이 똑같이 나와서 그런데 혹시 둘의 차이점이 있나요?

bamgoesn   1년 전

while문은 매 루프가 시작할 때 조건문을 확인하여, 참이면 루프문을 진행하고 거짓이면 스킵합니다. 반면에 위 코드는 루프가 끝날 때 조건문을 확인하고 있습니다.

이때문에 n이 1로 입력되었을 때, 위 코드는 첫 루프를 실행하여 q.pop() 후 빈 큐에 대해 q.front()를 실행하여 Segfault를 발생시킵니다. 반면에 정답을 받으신 코드는 n이 1일 때 while문 내의 코드를 한 번도 실행시키지 않고 바로 출력 부분으로 넘어가게 되어 Segfault가 발생하지 않게 됩니다.

specture258   1년 전

감사합니다! 이해가 잘 되었습니다.

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