kdj6551   3년 전

test case의 while 문 안에 bool visit[1001]을 선언하면 오답이 뜨는데,

while 문 밖에 선언하면 정답이 뜹니다.

기초 지식이 부족하여 이 경우에 왜 오답이 뜨는지 잘 감이 안잡히는데 

혹시 왜 그러는지 알 수 있을까요?

감사합니다.

ckdgus2482   3년 전

memset을 반복문 시작부분으로 옮겨보시죠. 첫 번째 tc에서 visit이 false로 초기화되어있지 않아서 오답이 뜨는 것일 겁니다.

그래도 while문 안에 있든 밖에 있든 main함수의 지역변수라서 똑같을 것 같은데 좀 이상하네요...

결과만 놓고 본다면 while문 밖에 선언했을 때는 컴파일러가 임의로 false값으로 초기화 해줬고 while 문 안에 선언했을 때는 그렇지 않았다는 건데 그렇게 동작할만한 타당한 이유가 없어보여서 혹시 아시는 분 있으면 답변 해주세요.

kdj6551   3년 전

말씀하신대로 while문안에 visit를 선언하고 그 다음줄에 바로 memset으로 초기화 해주니까 정답이 뜹니다.

왜 그런건지 정말 궁금하네요 ㅎㅎ

답변 정말 감사드립니다!

seico75   3년 전

전역변수는 자동으로 0으로 초기화가 되고, 지역변수는 쓰레기값이 남습니다.

위의 두 경우는 모두 지역변수라고 쓰레기값이 남고, 모두 정답이 (항상) 나오지는 않습니다. 

while밖에서 정답으로 나온 것은 우연이라고 볼 수 있습니다.

위의 경우는 첫 testcase 만 지나면 초기화하니까 이후는 항상 정답이 나오겠지만, 

만일 첫 testcase 가 좀 컸다면 오답이 나올 것 같습니다.

seico75   3년 전

input.txt

위 예제를 넣으면 800이 나와야 하는데 다른 값이 나오네요.

kdj6551   3년 전

앗 몰랐던 사실이었네요!

답변 감사드립니다!

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