제 경우에는 int 백만개 = 4MB 기준으로 생각합니다.
int arr[1000][1000] 을 잡으면 4MB정도 쓸 것이고 long long으로 선언한다면 그 두배인 8MB, char이라면 1/4인 1MB를 사용하게 되겠죠.
예를 들어, long long arr[4000][4000] -> int arr[1000][1000] 의 4* 4 * 2 = 32 배 -> 128 MB 처럼 계산을 합니다.
동적으로 메모리를 사용하는 vector, set, map 등의 STL 자료구조들은 조금 복잡해질 수 있는데, 최악의 경우 자료구조에 몇개정도의 데이터가 들어가는지 계산해보면 됩니다. 다만 set, map등 복잡한 자료구조의 경우에는 단순히 데이터 외에도 여러 변수들이 같이 저장되므로 여유를 좀 많이 잡아줘야 됩니다.
디버깅을 할 때 무작정 코드만 보고있는것 보다는 printf를 써서 확인하는건 좋은 습관이라고 생각합니다. 다만 규모가 큰 개발을 할 때는 사용할 수 없는 방법이라 알고리즘 문제를 풀때만 유효한 방법이긴 한 것 같네요.
dreamian 3년 전 2
안녕하세요, 가입 한 지 얼마 안 된 뉴비입니다.
그동안 몇 개의 문제를 풀어보며 궁금한 점이 있어서요.
이곳에서 제공하는 많은 문제의 경우 메모리 제한이나 시간 제한이 있는데,
시간 제한의 경우는 알고리즘의 복잡도를 어느정도 예상할 수 있는데, 메모리 제한의 경우는 어떻게 대처해야 할 지 모르겠어서
질문 올리게 되었습니다.
혹시 다른 분들께서는 코딩을 할 때, 배열 선언이나 메모리가 가용될 때에 그것을 어느 정도 예상하고 코딩을 하시는지, 아니면
코딩을 하면서 그것을 정확하게 알 수 있게 해주는 방식이 있는지 궁금합니다.
또한, 디버깅에 대해 저는 의심이 되는 문에 printf문을 선언하여 돌아가는지 확인하는 편인데,
이러한 방식이 맞는건지 궁금합니다.
감사합니다!