[Algorithm] c++ 문자열 배열 관리

여러개의 문자열을 배열로 관리해야 하는 경우가 있다고 가정해보자. 예를 들어 아래의 문제를 풀어보자.

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.


풀이방법은 여러가지가 있다. 내가 생각한 방법은

  1. 입력받을 문자열의 최대길이인 80을 가지는 char 2차원 배열 사용 ( char arr[*][80 )
  2. 입력받은 문자열의 각 길이 만큼만 가지는 char 2차원 배열 사용
결과부터 말하자면 두 코드의 메모리 사용량은 비슷하게 나왔다. 하지만 데이터의 크기가 더 많이 차이나면 성능 차이가 나지 않을까 생각한다..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int count;
    cin>>count;
    char **arr = new char*[count];
    int **score = new int*[count];
    char buffer[80];
    for (int i=0;i<count;i++){
        cin>>buffer;
        int l = strlen(buffer);
        if (l>0){
            char *newstr = new char[l];
            strcpy(newstr,buffer);
            arr[i]=newstr;
            int *newscore = new int[l];
            score[i]=newscore;
        }
        else break;
    }
cs



No comments:

Powered by Blogger.