[코테에 많이 활용되는 기법] - 메서드 etc.
1. 아무리 봐도 로직은 맞는데 시간초과가 날 경우 생각해볼 방안
1-1. 출력 형식을 System.out.println이 아 String Builder로 가져가자.
1-2. 입력 형태를 Scanner가 아닌 BufferedReader로 가져가자.
* StringBuilder에 모든 내용을 한꺼번에 넣어서 append하는 것보다 하나씩 분리해서 append를 이어붙이는 식으로 해야 속도가 더 빠르다.
2. HashSet에 add 메서드 사용 시 배열을 넣을 경우, 해당 배열의 참조변수가 들어가기 때문에 배열 간의 중복검사는 set으로 할 수 없다.
🏷️ Integer ArrayList를 int 배열로 바꾸고자 할 때
import java.util.*;
public static void main(String args[]) {
List<Integer> list = new ArrayList<>(); // 인 상황에서
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
}
🏷️ int[]에서 최소/최대값을 구할려고 할 때
int[] list = new int[]{2, 67, 34, 8};
int min = Arrays.stream(list).min().getAsInt();
int max = Arrays.stream(list).max().getAsInt();
🏷️ 특정 인덱스 범위에 해당하는 배열을 복사할 때
Arrays.copyOfRange(원본 배열, 시작 인덱스, 끝 인덱스(포함X));
🏷️ 객체 간 속성 값 비교 : Comparable 인터페이스의 compareTo 메서드
class Student implements Comparable<Student> {
int age; // 나이
Student(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
// 자기자신의 age가 입력으로 들어온 o의 age보다 크다면 양수
if(this.age > o.age) {
return 1;
}
// 자기 자신의 age와 o의 age가 같다면 0
else if(this.age == o.age) {
return 0;
}
// 자기 자신의 age가 o의 age보다 작다면 음수
else {
return -1;
}
}
}
(비교 대상이 되는 원래 객체).compareTo(새로 들어온 객체);
compareTo 메서드 : 음수, 0, 양수의 값을 반환해준다.
입력으로 들어온 객체의 속성 값과 비교 대상이 되는 객체의 속성 값을 비교하는데, 주체는 비교 대상 객체이다.
즉, 입력값에 비해, 비교 대상이 더 크면 양수를, 같으면 0을, 작으면 음수를 내보내게 된다.
compareTo를 오버라이딩해서 내림차순 등을 구현할 수 있다.
동작 원리는 음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.
예를들어 { 2, 1, 3 } 이라는 배열이 있고, Arrays.sort(array, (a, b) -> b.compareTo(a)); 을 실행한다면,
Arrays.sort로 우선 오름차순 정렬이 되고, (1,2,3} 에서 1 , 2가 들어오면 a = 1, b = 2로 compareTo는 양수를 출력하게 되고 두 숫자는 자리를 바꾸게 된다.