작성
·
221
0
http://boj.kr/4976421e71824203b6ab2f6f775d64c5
스스로 풀고 선생님 코드가 더 시간이 빠르시길래 선생님 방식으로 다시 짜봤었는데 계속 메모리초과가 나서 별짓 다하다가++comp_cnt 이부분을
comp_cnt++;
comp[comp_cnt] = dfs(i, j, comp_cnt); 이렇게 하니까 통과하더라구요.. 혹시 dfs돌릴때 comp_cnt가 증가된 값이 들어가지않나 디버깅해봐도 증가된 상태로 dfs가 돌아가고있고.. 차이가 없는 것 같은데 통과되지 않아서 이게 뭔가 싶어서 질문드려봅니다.. 뭐가 잘못된건지 몰라서 너무 답답합니다 ㅠㅠ
답변 1
0
안녕하세요 재욱님 ㅎㅎ
#include <bits/stdc++.h>
#define MAX 987654321
using namespace std;
int dfs(int cnt){
cout << cnt << "\n";
return 0;
}
int main()
{
int cnt = 0;
map<int, int> mp;
mp[++cnt] = dfs(cnt);
}
후위증감자든 선위증감자든 상관은 없는데요 이렇게 해도.
#include <bits/stdc++.h>
#define MAX 987654321
using namespace std;
int dfs(int cnt){
cout << cnt << "\n";
return 0;
}
int main()
{
int cnt = 0;
map<int, int> mp;
mp[cnt++] = dfs(cnt);
}
저렇게 해도 dfs에서는 0이 호출됩니다.
자,
mp[cnt++] = dfs(cnt);
이라는 코드에서 두 가지 연산이 수행됩니다:
dfs(cnt)
함수 호출
cnt++
(후위 증가 연산자)
후위 증가 연산자는 dfs(cnt)
호출 이후에 cnt
의 값을 증가시킵니다. 그러나, 함수 호출 시점에서 cnt
의 값은 아직 증가하지 않았기 때문에 dfs
함수에 전달되는 cnt
의 값은 증가되기 전의 값입니다.
따라서, main
함수에서 cnt
를 0으로 초기화하고, dfs
함수를 호출할 때 cnt
의 값은 여전히 0입니다. 그 후에 cnt++
가 수행되어 cnt
의 값이 1이 됩니다. 그러나 이는 dfs
함수에 영향을 주지 않게 되는 것이죠.
이러한 순서 때문에 그렇습니다. ㅎ
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.