jaeyoon8783   3년 전

이번 오후 삼성 코딩 테스트를 본 사람입니다.

저는 밑에 있는 코드에서 테케 초기화를 제외하면 거의 완벽히 일치하게 풀었습니다.

그런데 시험보는 곳 visual studio에서는 정답이 제대로 출력 되었고 오늘 백준에서도 정답을 받았지만 

현장에서는 한가지 케이스에서 런타임 에러를 계속 내뿜어서 해당 오류를 잡는데 상당한 시간을 소요했고 결국 잡지 못했습니다.

segmentation fault 에러가 나서

map[][] 배열 크기도 늘려보고 map_dir[4][5][5] 도 map_dir1[5][5] map_dir2[5][5] map_dir3[5][5] map_dir4[5][5] 를 쪼개보는 시험을 했지만

결과는 같았습니다.

혹시 저와 같은 에러가 나신 분이나 고수님들

이 보이지 않는 무언가를 밝힐 수 있는 길을 알려 주실 수 있을까요 ? ㅠㅠ

그 당시 입력 케이스는 

int n = 99

for(int i = 0 ; i < 99 ; i++) {

   for(int j = 0 ; j < 99 ; j++ {

       cout << 1000

  }

}

이였습니다.  

pichulia   3년 전

스택 메모리가 터진거같네요

jaeyoon8783   3년 전

말을 들으니깐 너무 많은 go함수를 쌓아서 발생된 상황인거같네요

처음 겪은 일이라 좋은 피드백 받아갑니다

하나 궁금한것이 있는데 스택 쌓은양은 백준 결과창의 메모리 소비랑 관련이 없는것인가요?

danimartinwife   3년 전

동일한 로직을 비재귀적으로 구현이 가능하면 비재귀로 하는게 메모리 덜 먹지 않나요?

jaeyoon8783   3년 전

글쵸 사실 시험볼때도 메모리가 256MB 라길래 안터질줄 알았더만

나중에 생각해보니 삼성 시험에서는 스택 사이즈도 제시했다 라는 것을 깨달았습니다

boramatlulu   3년 전

어 혹시 답변 제출하실 때 원래 적혀있던 내용 전부다 지우고 제출하셨나요?

저도 뭐 코테 제대로 푼게 이번이 처음이라 잘 아는건 아닌데

그거 삼성 낼떄 맨 위에 빨간색으로 선언된 문들 건들이니까 저도 falut났어서 깜놀했었습니다.

정확히 기억은 안나는데 빨간색? 으로 한 두줄가량 뭔가 사전에 필요한 코드가 선언된거 같은데 자세히는 모르겠습니다.

여하튼 처음엔 저도 제가 푼 코드를 답변제출할때 기존의 코드 전부 지우고 했다가 메모리 falut 오류가 났고, 

뭔가 건들이면 안되는게 있는가 싶어서 reset한 다음

맨 위를 포함하여 기존의 코드는 내비두고 그냥 일일이 함수랑 메인함수 복붙해서 옮겨서 문제 풀었습니다

jaeyoon8783   3년 전

제가 거기까진 기억 안지만 빨간색이라는것이 #include 선언 말하시는건가요??

아마 다 지웠을껍니다. 제가 삼성 코테를 3번 봤는데 그냥 IDE에서 풀고 그것을 그대로 옮겨서 문제가 되는 경우는 없었습니다.

하나 확실한것은 재귀적으로 풀어서 스택이 터지는 바람에 segmentation fault가 뜬건 기정사실인것 같습니다. while문으로 풀면 될 것입니다.

당시 제가 만든 테스트 케이스로

89

1000 1000.... 은 정답이 제대로 나왔지만

91

1000 1000......은 터졌기 때문입니다.

boramatlulu   3년 전

ㅇㅎ,,, 제가 코테를 처음 처서 정신이 없어서 아마 복붙하는 과정에서 실수가 있었나봅니다

혹시 stack size라 함은 

https://lollolzkk.tistory.com/...

위 사이트의 내용처럼 전체 주어진 메모리보다 항상 작은 사이즈로 변수선언할 공간이 할당되어서 발생하는 문제가 맞나요?

위의 사이트에선 vs에서 1MB로 나와있는데, 삼성 채점하는 서버도 똑같은 건지 궁금합니다

만약 그렇다면 사실상 주어진 메모리가... 의미가 없는셈이군요?

pichulia   3년 전

(완벽한건 아니고 이해를 위해 대략적으로만 설명하자면...)

지역변수는 stack 메모리를 사용하고

전역변수는 heap 메모리를 사용합니다.

.

boj같은 경우는 heap/stack 메모리가 동일하나(아마도?) 모든 online judge 사이트가 이런 것은 아닙니다.

.

사용 가능한 heap/stack 메모리는 시험 채점환경으로 항상 언급을 해줍니다.

기억이 안나신다면 그저 주의사항을 주의깊게 보지 않으신것 뿐입니다.

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