-
Arrays.binarysearch(int[] arr, int key)
이 method는 정렬이 되어 있어야 동작하는 알고리즘이다. 나는 만약 key값이 없다면 단순히 -1을 리턴하는 줄 알았는데, 공식문서에 나와있는 return 값에 대한 설명은 다음과 같다. 해당 key를 찾으면 그 위치를 리턴하고, 그렇지 않으면 -(insertion point) - 1 을 리턴한다. Insertion Point 란? key보다 큰 최초의 위치이다. 즉, key가 존재 하지 않으면 key를 넣었을 때 정렬된 값의 인덱스를 음수로 변경하여 반환한다. 예시 private static int[] values = { 3, 11, 15, 20, 21, 29, 45, 59, 65, 72 }; System.out.println("====== Arrays.binarySearch(배열, key) ===..
JAVA
2023. 2. 20.
-
나머지 연산(modulo) 의 분배법칙...
백준 문제를 풀다보면 정답을 1,000,000,000으로 나눈 나머지를 출력한다. 와 같은 문구를 많이 볼 수 있다. 금방도 아무생각없이... 정답을 구한 후에 마지막에만 mod 연산을 해주었더니 계속해서 "틀렸습니다" 만 나왔다.ㅋㅋ.. 조금만 생각해보면 당연한 것인데,,, 지금 많이 졸린가 보다 하하하 만약, 정답에만 mod연산을 해버린다면, 이미 overflow 된 값에 mod 연산을 하는 것이므로 의미가 없다. 즉, 연산 도중에 값이 갱신될 때마다 mod연산을 해야 한다는 것이다!!! 이의 원리는 나머지 연산의 분배법칙을 예시로 들 수 있다. 즉, mod연산은 아래와 같이 분배법칙이 성립되므로 연산 도중에 mod 연산을 해주어도, 같은 결과값이 도출됨을 알 수 있다!
JAVA
2023. 2. 3.