"숫자(공백)숫자(공백)..."형식으로 된 스트링 배열이 있을 때
예)
arr[0]="5 10 "
arr[1]="1 4 10 "
arr[2]="2 3 10 "
.
.
.
이 스트링들 sorting하려고 한단말이야. 왼쪽부터 비교해가면서 작은 숫자를 가진 스트링이 배열의 맨 처음에 오도록.
예)
arr[0]= "1 4 10 "
arr[1]= "2 3 10 "
arr[2]= "5 10 "
.
.
.
String 두개와 int 하나를 매개변수로 받는 메소드를 만들었는데
여기서 i는 비교할 스트링 line1, line2의 인덱스이기 때문에
0으로 호출 시작해서 재귀호출할꺼임.
public static boolean compare(String line1, String line2, int i){
if(i<Math.min(line1.length(), line2.length())-1){ //인덱스 i가 line1이나 line2의 길이보다 크지 않을 때
if(line1.charAt(i)>line2.charAt(i)) //line1의 i번째 문자가 line2의 i번째 문자보다 크면 true
return true;
else if(line1.charAt(i)<line2.charAt(i)) //line1의 i번째 문자가 line2의 i번째 문자보다 작으면 false
return false;
else if(line1.charAt(i)==line2.charAt(i)) /* line1의 i번째 문자가 line2의 i번째 문자보다 같으면
compare(line1, line2, i+1); 재귀호출해서 다음 인덱스 비교 */
}
else if(i>Math.min(line1.length(), line2.length())-1) /* 인덱스가 line1이나 line2의 끝까지 가면 false
return false; 예) "1 2 4 "랑 "1 3 " 비교 할 때 2랑 3까지만 비교완료된 상태이니 그냥 false 반환
return false; //얘는 의미 없음. 조건문 밖에 boolean 반환해야 메소드 오류 안나서 그냥 붙인거
}(line1.length(),>
이렇게 메소드 만들고
정렬에서
if(compare(arr[i].arr[j],0))
//sweep
했는데 정렬이 제대로 안됨.
저 메소드가 잘못된거임? 왜 난 문제를 못찾겠지.
아니면 메소드는 제대로 됐는데 정렬이 잘못된건가.
참고로 입력이
5 10
1 4 10
2 3 10
6 9
1 5 9
2 4 9
1 2 3 9
7 8
1 6 8
2 5 8
3 4 8
1 2 4 8
2 6 7
3 5 7
1 2 5 7
1 3 4 7
4 5 6
1 3 5 6
2 3 4 6
1 2 3 4 5
일때
출력이
1 2 3 4 5
1 3 5 6
1 4 10
1 3 4 7
1 2 5 7
1 5 9
1 2 4 8
1 2 3 9
1 6 8
2 3 4 6
2 5 8
2 3 10
2 4 9
2 6 7
3 4 8
3 5 7
4 5 6
5 10
6 9
7 8
이렇게 나와버림
(line1.length(),>
봐드렸습니다.
공백 지우고 숫자로 변경한다음에 정렬후 숫자를 다시 포멧에 맞는 형태로 변태