hangbum0   4년 전

아래 소스 코드에서 4번째 줄 변수 선언을 지역 변수로 하면 오답이라 뜨고, 전체 변수로 바꾸면 정답이라 뜨는데 이유를 알 수 있을까요??

그리고 8번째 줄의 for을 연속 3번 쓰는 것과, 중첩 반복문(for {for {for {}}})의 차이가 있나요? 이 방법이 속도가 더 빠르다면 그 이유를 알 수 있을까요??

감사합니다!!

ckdgus2482   4년 전

전역변수는 메모리 공간이 0으로 초기화되어있음이 보장되어 있습니다.

지역변수는 별도로 초기화를 하지 않으면 쓰레기 값이 들어 있고요.

8번째 라인이 중첩 반복문이랑 같은 겁니다. for문 바디가 한 statement면 중괄호를 생략할 수 있습니다.

hangbum0   4년 전

그렇군요 그럼 지역변수로 설정할때 int a[101] = {0};이런식으로 초기화해주면 문제가 없나요?

rlarla97   4년 전

1.

전역변수의 경우 프로그램이 시작되는 시점부터 종료시점까지 메모리에 올라갑니다. 그리고 다른 초기값이 없을경우 0 으로 초기화를 보장해주죠.

그와 반대로 지역변수는 윗분 댓처럼 초기화가 없을경우 쓰레기값을 갖게됩니다. 또한 해당 함수가 종료되는 시점에서는 지역변수들은 더이상 메모리에 있지 않습니다.


지역변수로 설정할 때 int a[101] = {0,}; 으로 해당 배열을 모조리 0 으로 초기화 시켜도 됩니다만,

님이 어떻게 로직을 짜느냐에 따라 다릅니다.


어떨때는 쓰레기값으로 두는게 로직을 짤 때 예상하지 못한 일들(필요없는 배열 접근 같은)에 대해 에러를 뱉어낼 수 있어 더 좋은 점도 있죠. 에러에 따라 어디가 문제인지 더욱 빠르게 밝히고 수정할 수 있으니깐요.

이 부분은 사용자가 로직을 어떻게 짜느냐에 따라 다르기에 어떻게 하라고 답변하는건 어려운 것 같습니다.


2.

성능 차이가 없습니다. 둘 다 같은 중첩반복문이고 다만 중괄호를 생략했을뿐 메모리에 똑같이 로드되고 날립니다.

시간복잡도는 둘 다 O(N3)입니다.

hangbum0   4년 전

아하 답변 감사합니다!

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