[알고리즘]/CodeTree

[codetree] 프로그래밍 연습_변수의 영역

우당탕탕 개발 일지 2024. 11. 14. 22:35

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

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

 

지역 변수: 블록 내에서 선언되어  블록 안에서만 사용 가능.
전역 변수 : 코드 전체에서 사용가능.

 

 

__함수를 이용한 부분 문자열의 위치 구하기__

int k의 위치 때문에 계속 에러가 났습니다. k가 찾는 문자열의 길이와 일치하지 않으묜 k를 다시 0으로 초기화 시킨후 동작해야 합니다. 

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

string s;
string finds;

int func() {
    for (int i = 0; i <= s.length() - finds.length(); i++) { 
        int k = 0;
        
        if (finds[0] == s[i]) {
            for (int j = 0; j < finds.length(); j++) {
                if (s[i + j] == finds[j]) {
                    k++;
                } else {
                    break; 
                }
            }
            if (k == finds.length()) { 
                return i;
            }
        }
    }
    return -1; 
}

int main() {
    cin >> s >> finds;
    cout << func();
    return 0;
}

 

지역 변수와 전역 변수를 완전히 안다고 생각 했는데 이번 회차에서 나오는 출력값 적는 문제에서 저의 오만이였다는 것을 느꼈습니다...허허.. 제대로 알기보다 제대로 모르고 있는 쪽에 가까웠네요. 여러번 봐야 숙지할 내용 같아서 내용 가져왔습니다.

int num = 5;

void g() {
    cout << num << " ";
}
void f() {  
    num = 9;
    while(num < 8)
        num++;
    cout << num << " ";
    g();
}

int main() {
    f();

    cout << num << " ";
    return 0;
}

 

저는 결과값이 955라고 생각 했습니다. 지역변수 쓰거나 인자로 넘겨주는 게 아니면 전역 변수를 사용한다고 생각 했습니다.

정답은 999입니다.  먼저 f()를 호출하기 전 num의 값은 전역변수인 5입니다. 그리고 f()함수가 동작할때 num값이 9이기 때문에 전역변수의 값도 이때 변해서 g()에서 num값도 9입니다. 

 


int num = 5;

void g() {
    cout << num << " " ;
    num += 9;
}
void f() {  
    int num = 7;
    cout << num << " ";
    num += 2;
}

g();
f();
g();

해당 코드의 경우에도 저는 출력 값이 5 7 9라고 생각했는데 정답은 5 7 14 입니다. 제가 생각한 방식은 모든 함수가 지역 변수처럼 동작한다고 오해했기 때문입니다.  먼저 g()에서 전역 변수 5가 출력되고 전역 변수에 9가 더해져 14인 상태입니다. 그리고 f()를 호출하면 지역 변수인 7이 출력되고 지역변수에 2가 더해서 지역 변수 num은 9가 됩니다.다시 g()가 호출하면 전역변수를 불러와 아까 9를 더한 14가 출력되는 것입니다.

 


__특정 구간 합__

#include <iostream>
using namespace std;
int A[100];
int sum[100];

void func(int A1,int A2,int n)
{
    for(int i=A1-1; i<A2; i++)
    {
        sum[n]=sum[n]+A[i];
    }

}




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

    int n,m;
    cin>>n>>m;

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

    
    int a1,a2;
    for(int j=0; j<m; j++)
    {
        cin>>a1>>a2;
        func(a1,a2,j);

    }



    for(int k=0; k<m; k++)
    {
        cout<<sum[k]<<"\n";
    }


    return 0;
}

 

 

 

 

공부할 때는 늘 겸손하자 생각하지만 다시 한번 더 공부에 대해서 겸손해야겠다고 생각한 날이였습니다. 

728x90