강의로 돌아가기
박 무동

c++ 1~6 테스트 케이스

알고리즘 다음과 같이 작성했습니다.

  1. 모든 인수 문자열로 변환
  2. 문자열을 제일 앞의 문자를 기준으로 정렬 2.1 이때 문자열이 같은 경우 다음 인덱스에 위치한 문자를 비교함 2.2 인덱스를 증가시킬 때, 인덱스가 문자열의 크기를 벗어난 경우, 더 짧은 문자열의 첫번째 문자와, 긴 문자열의 다음 인덱스를 비교함
  3. 문자열 정렬 이후 문자열을 모두 병합

이렇게 작성했는데, 1~6 케이스에서 정상작동하지 않는데, 어떻게 해결해야할지 모르겠습니다. ㅠㅠ

작성중인 코드―solution.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compareCriteria(string str1, string str2);

string solution(vector<int> numbers) {
    string answer = "";
    vector<string> numbersString;

    for(int i = 0 ; i < numbers.size() ; i++){
        numbersString.push_back( to_string( numbers[i] ) );
    }

    sort(numbersString.begin(), numbersString.end(), compareCriteria);

    for(int i = 0 ; i < numbersString.size() ; i++){
        answer.append( numbersString[i] );
    }

    numbersString.clear();
    numbersString.resize(0);

    if(numbersString[0] == "0") return "0";

    return answer;
}

bool compareCriteria(string str1, string str2) {

    if (str1[0] > str2[0]) return true;
    else if (str1[0] < str2[0]) return false;

    else {
        int minSizeLength = 0;
        int maxSizeLength = 0;
        int minSizeString = 0;

        //Set the Variable for iteration
        if (str1.length() > str2.length()) {
            maxSizeLength = str1.length();
            minSizeLength = str2.length();
            minSizeString = 2;
        }

        else if (str1.length() < str2.length()) {
            maxSizeLength = str2.length();
            minSizeLength = str1.length();
            minSizeString = 1;
        }

        else {
            maxSizeLength = str1.length();
            minSizeLength = maxSizeLength;
        }

        for (int i = 0; i < minSizeLength;) {
            if (str1[i] > str2[i]) return true;
            else if (str1[i] < str2[i]) return false;
            else i++;
            //if str1[i] == str2[i], Do nothing
        }

        if (minSizeString == 0) return false;

        for (int i = minSizeLength; i < maxSizeLength; ) {
            if (minSizeString == 2) {
                if (str1[i] > str2[0]) return true;
                else if (str1[i] < str2[0]) return false;
                else i++;
            }

            else if (minSizeString == 1) {
                if (str1[0] > str2[i]) return true;
                else if (str1[0] < str2[i]) return false;
                else i++;
            }
        }

        return false;
    }
}
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.