public String[] solution2(String[] strings, int n) {
String[] answer = {};
int size = strings.length;
for (int i = 1; i < size; i++) {
outer : for (int j = 0; j < size - i; j++) {
if (strings[j].charAt(n) > strings[j + 1].charAt(n)) {
String tmp = strings[j];
strings[j] = strings[j + 1];
strings[j + 1] = tmp;
}
if (strings[j].charAt(n) == strings[j + 1].charAt(n)){
int min = Math.min(strings[j].length(), strings[j + 1].length());
//그 부분을 간과했다.
//abcd, bbc가 있다고 했을때 a>b이면 당연히 위치를 바꾸는거고 a < b이면 for loop를 끝때야했다.
//왜냐하면 이미 결판 난것이니까 a < b보다 작으니 더이상 루프돌릴필요없다. abcd와 bbc는 위치를 바꿀 필요가 없는것이다.
//근데 나는 처음풀때 a>b인경우만 연산하고 a<b일 때는 전혀 고려하지 않았다. 그래서 문제가 틀렸다.
for(int k = 0; k < min; k++) {
if (strings[j].charAt(k) > strings[j + 1].charAt(k)) {
String tmp = strings[j];
strings[j] = strings[j + 1];
strings[j + 1] = tmp;
continue outer;
}else if(strings[j].charAt(k) < strings[j + 1].charAt(k)){
continue outer;
}else{
}
}
if (strings[j].length() > strings[j+1].length()) {
String tmp = strings[j];
strings[j] = strings[j + 1];
strings[j + 1] = tmp;
}
}
}
}
answer = strings;
return answer;
}
예를 들어 abcd와 bbcd가 나란히 있고 n은 2라고 가정합니다.
"a b [c] f 와 b b [c] d" 는 인덱스 2의 위치의 문자가 서로 같기때문에 사전순으로 정렬해야합니다.
사전순으로 정렬하기위해 각 인덱스를 비교하시려고 할것입니다.
이때 A[index] > B[index]이면 A와 B의 위치를 바꾼다만을 적용하셨을 것 같습니다.
하지만 여기서 끝내시면 안됩니다.
각 인덱스를 비교하는 반복문을 예로 들어 보겠습니다.
A : [a] b c f
B : [b] b c d
A[index] 와 B[index]를 비교합니다.
A[index] < B[index]이기 때문에 순서를 바꾸지 않는 것이 사전순의 정렬임을 알게되었습니다.
즉 첫번째 단계에서 사전순으로 정렬하려는 반복문은 무조건 끝이나야합니다.
하지만 [A[index] > B[index]이면 A와 B의 위치를 바꾼다] 라는 하나의 조건만을 적용하면 반복문은 끝이나지 않습니다.
해당 예의 경우 A[lastIndex] 와 B[lastIndex]까지 비교를 하게 됩니다.
A : a b c [f]
B : b b c [d]
A[lastIndex] 와 B[lastIndex]까지 비교에서 [A[index] > B[index]이면 A와 B의 위치를 바꾼다]가 작동되게 되고
따라서 A와 B의 위치는 변하게 되어 오답이나옵니다.
위치 : B A
오답이 안나오게 하기위해 우리가 필요한건 ""A[index] < B[index]이면 사전순으로 정렬하려는 반목문을 끝낸다." 입니다.
즉 A[index] > B[index]이면 A와 B의 위치를 바꾼다와 "A[index] < B[index]이면 사전순으로 정렬하려는 반복문을 끝낸다."를
같이 조건으로 걸어야 합니다.
해당 조건을 걸면 첫번째 단계에서 "A[index] < B[index]이면 사전순으로 정렬하려는 반복문을 끝낸다."라는 조건이 작동하게 되고 반목문은 끝이나게 됩니다.
A : [a] b c f
B : [b] b c d
A와B는 문제에서 제시한 조건대로 위치하게 됩니다.
위치 : A B