[알고리즘]/CodeTree

[codetree] 프로그래밍 연습_ call by value/ call by reference (메모리 초과 해결)

우당탕탕 개발 일지 2024. 11. 12. 15:58

안녕하세요. 우당탕탕 개발일지 입니다. 꾸준히 문제 풀기 다시 시작해보겠습니다. 

codetree가 마음에 들어 순서대로 풀 것 같습니다. 아자아자 화이팅!

<프로그래밍 연습>

1.함수
2. 재귀함수
3. 정렬
4. 시뮬레이션1,2
5. 완전 탐색 1,2,3
6.케이스별로 나누기
7.Ad-Hoc

 

 

__짝수만 2로 나누기__

#include <iostream>
using namespace std;

void func(int *a,int x)
{
    
    a[x]=a[x]/2;
    
}


int main() {
    // 여기에 코드를 작성해주세요.
    int N;
    cin>>N;

    int arr[100];

    for(int i=0; i<N; i++)
    {
        cin>>arr[i];
    }
    for(int j=0; j<N; j++)
    {
        if(arr[j]%2==0)
        {
            func(arr,j);
            cout<<arr[j]<<" ";
        }
        else
        {
            cout<<arr[j]<<" ";
        }

    }
    

    return 0;
}

 

 

 

__문자열을 인자로 받는 함수__ !!! 메모리 초과 발생!!!

그냥 함수로 출력하는 코드가 먼저 떠올라 call by reference를 사용하지 않고 코드를 작성 했는데 메모리 초과가 발생하였습니다. 

아래에 해결 코드 참조하겠습니다.

/* 메모리 초과가 발생한 코드 */
#include <iostream>
#include<string>
using namespace std;

bool pail(string str)
{
   
    string tmp;
    for(int i=0; i<str.size(); i++)
    {
        tmp[i]=str[str.size()-1-i];

    }

    int k=0;

    for(int j=0; j<str.size(); j++)
    {
        if(tmp[j]==str[j])
        {
            k++;
        }
    }
    


    if(k==int(str.size()))
    {
        return 1;

    }
    else
    {
        return 0;
    }
    

}


int main() {
    // 여기에 코드를 작성해주세요.

    string s;
    cin>>s;

    pail(s);


    if(pail(s))
    {
        cout<<"Yes";
    }
    else{
        cout<<"No";
    }

    return 0;
}

 

메모리 초과 해결코드_ 문자열 변수 tmp, 정수 k 선언 없이 함수 짜기.

#include <iostream>
#include<string>
using namespace std;

bool pail(string &str)
{
    for(int i=0; i<str.size(); i++)
    {
        if(str[i]!=str[str.size()-1-i])
        {
            return false;
        }
    }
    return true;
    
}


int main() {
    // 여기에 코드를 작성해주세요.

    string s;
    cin>>s;

    


    if(pail(s))
    {
        cout<<"Yes";
    }
    else{
        cout<<"No";
    }

    return 0;
}

__ 절대값으로 바꿔서 출력 __배열을 함수에 reference로 넘겨줄때 point(*) 사용.

배열에 &기호 썼다가 무한 컴파일 에러의 굴레에 잠시 다녀왔습니다. 

#include <iostream>
using namespace std;

int N;
int a[200];

void func(int *a, int n)
{
    for(int i=0; i<n; i++)
    {
        if(a[i]<0)
        {
            a[i]=a[i]*(-1);
        }
        else
        {
            a[i]=a[i]*1;
        }
    }
}

int main() {
    // 여기에 코드를 작성해주세요.
    
    cin>>N;

    for(int i=0; i<N; i++)
    {
        cin>>a[i];
    }

    func(a, N);

    for(int j=0; j<N; j++)
    {
        cout<<a[j]<<" ";
    }

    return 0;
}

 

728x90