
1. 오늘의 학습 키워드
2. 공부한 내용 본인의 언어로 정리하기
static boolean isExist(int tar, int[] arr) {
int l = 0, r = arr.length - 1;
while(l <= r) {
int m = (l + r) / 2;
if(arr[m] == tar) return true;
else if(tar > arr[m]) l = m + 1;
else r = m - 1;
}
return false;
}
3. 오늘의 회고
3.1 어떤 문제가 있었고, 나는 어떤 시도를 했는지
- n과 m의 최댓값이 100만이므로, 선형 탐색을 하면 약 1조의 시간복잡도를 가집니다. 따라서 시간 초과가 날 것입니다.
3.2 어떻게 해결했는지
- '수첩 2' 배열을 소트한 뒤, '수첩 2' 배열을 순회하며 '수첩 1'의 원소가 있는지 이분 탐색을 하면, nlogn + m x logn 의 시간복잡도를 가집니다. 이는 1억이 안 되므로 시간 안에 풀 수 있습니다.
- 자바가 제공하는 이분 탐색 메서드가 있지만, 직접 구현해보았습니다.
3.3 무엇을 새롭게 알았는지
- br.readLine()이 던지는 예외에는 NumberFormatException도 있었습니다. 이클립스에서 자동완성 해주길래 알았습니다.
3.4 내일 학습할 것은 무엇인지
- 오늘은 첫 날이라 쉬운 문제가 나온 게 아닐까 싶습니다.
- 내일 출제되는 문제의 알고리즘에 대해 공부할 것이고, 개인적으로 삼성 기출문제도 풀 계획입니다.
- 내일 어떤 문제가 나올지 기대됩니다.