λ¬Έμ νμ
m x n
νλ ¬μ΄ μ£Όμ΄μ§λ€.
κ° νμ λΉλ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬λμ΄μλ€.
κ° νμ 첫 μμλ μ΄μ νμ λ§μ§λ§ μμλ³΄λ€ ν¬λ€.
target
μ΄ νλ ¬μ μ‘΄μ¬νλμ§ μ°ΎμμΌνλ€.
μκ° λ³΅μ‘λλ O(log(m*n)) μΌλ‘ μνν΄μΌνλ€.
νμ΄
1οΈβ£ μ΄λΆ νμ
π‘ λ μ€λ₯Έ Idea
νλ ¬ λ΄μ μμκ° μ‘΄μ¬νλμ§λ§ νλ¨νλ©΄ λκΈ° λλ¬Έμ, 2μ°¨μ νλ ¬μ 1μ°¨μμΌλ‘ λ³νμν¨ ν μ΄λΆνμμ μ§ννλ©΄
μκ°λ³΅μ‘λ O(log(m*n)) λ λ§μ‘±νλ©΄μ, λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ κ²μ΄λΌ μκ°μ΄ λ€μλ€.
λν, κ° ν λ΄ μμμ νλ€ λΌλ¦¬ μ λ ¬λμ΄ μμ΄μ νΈνκ² μ΄λΆνμμ μ¬μ©ν μ μμ κ²μ΄λΌκ³ νλ¨νμλ€.
μ μμ΄λμ΄λ₯Ό λ°νμΌλ‘, νΉμ μμλ₯Ό μ°Ύμλ΄λ μ΄λΆνμ μ½λλ₯Ό ꡬννμλ€.
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int[] merged = new int[matrix.length * matrix[0].length];
int idx = 0;
for (int[] row : matrix) {
for (int element : row) {
merged[idx++] = element;
}
}
return bs(merged, target);
}
private boolean bs(int[] arr, int target) {
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (target < arr[mid]) {
right = mid - 1;
} else if (target == arr[mid]) {
return true;
} else {
left = mid + 1;
}
}
return false;
}
}
κ²°κ³Ό
2οΈβ£ Arrays.binarySearch() μ¬μ©
μ΄λΆ νμ ꡬν μ½λκ° μ μκ°λμ§ μμ λ, μ¬μ©ν μ μλ λ°©λ²μ΄λ€.
μ½λλ κ°κ²°ν΄μ§μ§λ§, μ΄λΆνμμ μ§μ ꡬννλΌκ³ νμ λ λΉν©ν μ μμΌλ μ¬λ§νλ©΄ μ§μ ꡬννκ³
λ§μ½, μ½ν μ΄μΈμ μ΄λΆνμμ μ¬μ©νκ² λ λμλ λ§λ€μ΄μ§ λ©μλλ₯Ό μ¬μ©νλ©΄ λ κ² κ°λ€.
import java.util.*;
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int[] merged = new int[matrix.length * matrix[0].length];
int idx = 0;
for (int[] row : matrix) {
for (int element : row) {
merged[idx++] = element;
}
}
return Arrays.binarySearch(merged, target) >= 0 ? true : false;
}
}
κ²°κ³Ό
κ²°κ³Όλ₯Ό λΉκ΅ν΄λ³΄λ©΄, μ§μ ꡬνν μ΄λΆνμλ³΄λ€ λ©λͺ¨λ¦¬λ₯Ό μ½κ° λ μ¬μ©ν κ²μΌλ‘ 보μΈλ€.
π νκ³
μ΄λΆ νμμ ν΅ν΄ νΉμ μμλ₯Ό κ²μνκ±°λ, μ½μ ν μ μλ μμΉλ₯Ό μ°Ύμ보λ λ¬Έμ λ€μ νμ΄λ³΄λ©΄μ λ€μν λ¬Έμ μμ νμ©ν μ μλ λ°©λ²μ ν°λνκ² λ κ² κ°λ€.
LeetCode μΈμλ μμ© λ¬Έμ λ€μ μ¬λ¬κ° νμ΄λ΄μΌκ² λ€λ μκ°μ΄ λ€μλ€.