didzl1231   1년 전

안녕하세요. 먼저 귀한 시간 내주시어 봐주셔서 감사합니다.

토마토 문제를 풀었는데 답과 답이 아닌 코드에 어떤 차이가 있는지 궁금하여 질문을 올립니다.

아래는 제가 제출한 Runtime Error(Segmetation fault - NZEC)와 AC된 코드의 차이입니다.

 graph(1001, vector(1001, 0)); -> wrong
graph(M, vector(N, 0)); -> ac

질문 게시판을 찾아보니 - ( c언어 세그멘테이션 오류 )

위의 상황과 동일한 것으로 보입니다. (아마도 NZEC은 중간에 변수를 선언하다가 터져서 그런것이라 추측 했습니다.)


백준 채점 시스템이 어떻게 구성되어있는지 전혀 지식이 없어 부끄럽지만, 1001 * 1001 * vector 사이즈만큼 할당하지 못해 생긴 오류다 라고 생각하고 넘어가도 괜찮을까요?


그리고 다른 문제를 풀때도 백만정도의 사이즈를 로컬 변수로 선언하는 행동은 삼가야 하는게 맞는지도 궁금합니다. 

(왜냐하면.. 했었던 것 같아요..)


감사합니다. (--)(__)

dh0450   1년 전

vector 는 동적할당으로 구현됩니다. 그래서 스택과는 관계가 없습니다.

위 문제는 bfs() 첫줄에

if(q.empty()) return;

이것만 추가해주면 해결이 됩니다.

큐가 빈 상태에서 front 를 참조하면 이상한 메모리를 참고하게 됩니다.

graph 로 미리 큰 메모리를 사용하면 이때 참조되는 메모리가 하필이면 에러가 터지는 곳이었을 듯 합니다. (이부분은 자세하게 모름)

didzl1231   1년 전

@dh0450 

귀한 답변 정말 감사드립니다. 

vector는 동적할당으로 구현된다는 사실을 몰랐었습니다. 부끄럽네요.(__) 


조언주신대로 다시 작성하여 채점을 해보니(41818552) AC가 되네요.

그런데 답변주신 내용으로 미루어 본다면, q에 원소가 0개인 소리라는 것이고, 그렇다면 토마토의 수가 0이라는 소린데 이는 문제 조건에 어긋나지 않을까요?

다른 질문 게시판의 TC에도 토마토의 개수가 0인 경우를 보았는데 조금 의아하긴 했었습니다.

다시 한번 귀한 답변 감사드립니다.

dh0450   1년 전

그러네요. 

그 문제로 글 쓰면 잘못된 데이터를 찾음이라고 기여도가 오르니 글을 써보세요!

didzl1231   1년 전

제가 기여를 할 수 있다니 벅차네요.

먼저 잘못된 데이터 작성 관련 사항들을 잘 읽어보아야 겠습니다!! 

다시 한번 귀한시간 감사합니다!

건강하세요 (--) (__)

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