인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

심재욱님의 프로필 이미지
심재욱

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

4-H

4-H 질문있습니다

작성

·

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); 이라는 코드에서 두 가지 연산이 수행됩니다:

  1. dfs(cnt) 함수 호출

  2. cnt++ (후위 증가 연산자)

후위 증가 연산자는 dfs(cnt) 호출 이후에 cnt의 값을 증가시킵니다. 그러나, 함수 호출 시점에서 cnt의 값은 아직 증가하지 않았기 때문에 dfs 함수에 전달되는 cnt의 값은 증가되기 전의 값입니다.

따라서, main 함수에서 cnt를 0으로 초기화하고, dfs 함수를 호출할 때 cnt의 값은 여전히 0입니다. 그 후에 cnt++가 수행되어 cnt의 값이 1이 됩니다. 그러나 이는 dfs 함수에 영향을 주지 않게 되는 것이죠.

이러한 순서 때문에 그렇습니다. ㅎ



 


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

심재욱님의 프로필 이미지
심재욱

작성한 질문수

질문하기