반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- awss3
- 가상면접2장
- s3이미지다운로드됨
- 리팩터링2판테스트
- react
- 가상면접3장
- FirebaseAnalytics
- 헤드퍼스트전략패턴
- 시스템설계면접예시
- 리액트구글애널리틱스
- git commit 협업
- gitsquash
- 디자인패턴
- formik submitting not working
- 시스템설계면접
- cypressBDD
- react-ga
- formik react-query submitting not working
- 테스트코드책
- 전략패턴
- cypress React
- 시스템설계방법
- file not found Error
- 리팩토링2판4장
- git commit merge
- git squash
- 시스템설계면접팁
- 가상면접으로대규모시스템
- 시스템설계
- Git commit 합치기
Archives
- Today
- Total
mingg IT
[Java] compare 메서드 Override, 특정 규칙에 따라 정렬하기 본문
방법 1
Arrays.sort 내에서 compare 메서드 override
compareTo 함수는 int의 경우 비교값 a, b가 있을 때
a > b 일 경우 result = 1
a = b 일 경우 result = 0
a < b 일 경우 result = -1
import java.util.*;
class Solution {
public int compareNumber (String o1, String head) {
String num = o1.substring(head.length());
String newStr = "";
// TAIL을 제외한 방법
for(int i = 0; i < num.length(); i++) {
if(Character.isDigit(num.charAt(i))) {
newStr = newStr + Character.toString(num.charAt(i));
} else break;
}
return Integer.parseInt(newStr);
}
public String[] solution(String[] files) {
String[] answer = new String[files.length];
//Compare 메서드 오버라이드
Arrays.sort(files, new Comparator<String> () {
@Override
public int compare(String o1, String o2) {
String head1 = o1.split("[0-9]")[0];
String head2 = o2.split("[0-9]")[0];
int result = head1.toLowerCase().compareTo(head2.toLowerCase());
//head가 같을경우
if(result == 0) {
result = compareNumber(o1, head1) - compareNumber(o2, head2);
}
return result;
}
});
return files;
}
}
방법 2
클래스에서 Comparator 인터페이스의 compare 메서드를 override한다.
//interface compare 메서드를 override한 class 정의
class CustomComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
String head1 = o1.split("[0-9]")[0];
String head2 = o2.split("[0-9]")[0];
int result = head1.toLowerCase().compareTo(head2.toLowerCase());
//head가 같을경우
if(result == 0) {
result = compareNumber(o1, head1) - compareNumber(o2, head2);
}
return result;
}
}
방법 2를 사용한 전체 코드
import java.util.*;
class Solution {
class CustomComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
String head1 = o1.split("[0-9]")[0];
String head2 = o2.split("[0-9]")[0];
int result = head1.toLowerCase().compareTo(head2.toLowerCase());
//head가 같을경우
if(result == 0) {
result = compareNumber(o1, head1) - compareNumber(o2, head2);
}
return result;
}
}
public int compareNumber (String o1, String head) {
String num = o1.substring(head.length());
String newStr = "";
// TAIL을 제외한 방법
for(int i = 0; i < num.length(); i++) {
if(Character.isDigit(num.charAt(i))) {
newStr = newStr + Character.toString(num.charAt(i));
} else break;
}
return Integer.parseInt(newStr);
}
public String[] solution(String[] files) {
String[] answer = new String[files.length];
//Compare 메서드 오버라이드
Arrays.sort(files, new CustomComparator());
return files;
}
}
관련된 문제
https://programmers.co.kr/learn/courses/30/lessons/17686
'코딩테스트' 카테고리의 다른 글
[Codility] PassingCars (Java) (0) | 2022.01.15 |
---|---|
[Java] 프로그래머스 구명보트 (0) | 2021.11.29 |
[Java] n 진수로 바꾸는 방법 (0) | 2021.07.19 |
[JAVA] set -> int [] 로 변환하는 방법 (0) | 2021.07.19 |
[Java] String 길이 만큼 배열 정렬 하는 법 (0) | 2021.07.19 |
Comments