자료구조

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

의미 부여하기

 이 토픽은 배열을 어려워하는 분들에게 이해를 돕기 위해서 작성되었습니다. 배열에 대한 충분한 이해를 하고있고 원하는 대로 활용할 수 있는 분들은 건너뛰셔도 됩니다.

 

 평소 강의를 하다보면 배열 사용을 어려워하는 분들을 많이 보게됩니다. 변수를 사용하는 일들은 익숙해져도 배열은 계속 어려워하는 경우도 많은데, 이 경우 배열을 다양하게 활용하는 알고리즘을 이해하는데 큰 걸림돌이 되기 마련입니다. 이 토픽에서는 배열을 어떻게 이해하면 좋은지, 어떻게 사용이 될 수 있는지에 대한 간략한 설명을 제공합니다.

 

수열로서의 배열 

 배열은 배열이름[항 번호]의 구조로 사용하게 됩니다. 이는 흡사 우리가 수학에서 자주 사용하던 ai꼴의 수열 표현법과 비슷합니다. 이런 특징을 이용하여 수열의 계산과정을 배열을 사용하여 저장해나가면 편한 경우가 많습니다. 수열이나 연속된 계산을 할 때에 배열 자체를 수열의 다른 표현이라고 보고 사용하면 훨씬 자연스럽게 계산에 사용할 수 있습니다.

배열이름[인덱스] == 수열이름[수열 항 번호]

 물론 수열에 대한 계산은 재귀함수 꼴로 해결할 수 있지만, 배열을 이용한 방법은  이미 계산한 값을 계속 저장해둘 수 있다는 장점이 있습니다. 이러한 특징은 후에 동적 계획법에서 중요하게 사용됩니다.

 아래는 대표적인 수열 두 가지를 배열을 통하여 계산한 방법입니다. 배열과 수열과 표현 방법만 다를 뿐 결국 똑같이 사용할 수 있음을 느껴야합니다.

int main(){
    int fibo[20]; //피보나치 수열
    int fact[20]; //팩토리얼 수열
    
    //피보나치 계산하기
    //a_i = a_i-1 + a_i-2
    fibo[0] = fibo[1] = 1; //초항
    for(int i=2; i<20; i++)
        fibo[i] = fibo[i-1] + fibo[i-2]; //점화식과 비교해보자.

    //팩토리얼 계산하기
    //a_i = i*a_i-1
    fact[0] = fact[1] = 1; //초항
    for(int i=2;i<20; i++)
        fact[i] = i * fact[i-1];

    return 0;
}

 

 

인덱스에 의미 부여하기 

 위에서 설명한 배열을 수열처럼 사용하는 방법을 조금 더 발전시켜 보겠습니다. 위에서 말했던 것 처럼 배열의 각 항에 접근은 배열이름[항 번호]꼴로 할 수 있으며 항 번호(인덱스)에 특별한 의미를 부여하면 더욱 다양하게 활용할 수 있습니다. 이런 방법에 익숙해지는 것으론 상수를 이용하는 방법이 있습니다.

 항 번호를 그 번호 자체에 의미를 두는 것이 아니라 나름대로 번호별로 의미를 부여하여 사용할 수 있는 예제를 알려드리겠습니다. 유저로부터 알파벳 대문자로 이루어지고 공백이 없는 문

 

댓글

댓글 본문
작성자
비밀번호
버전 관리
코딩몬스터
현재 버전
선택 버전
graphittie 자세히 보기