Coding Test/항해99 - 코테 스터디 2기

99클럽 코테 스터디 22일차 TIL(6월 11일) + 알고리즘 이분탐색

holajjm 2024. 6. 11. 14:17

[문제 링크]

https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/description/

 

[문제 사고]

주어진 이중 배열을 순회하며 각 요소별로 이분 탐색을 통해 조건에 맞는 요소의 개수를 반환한다.

 

[문제 해결]

Solution - 1
1. 정답을 반환할 임의의 변수 answer을 선언하고 0을 할당한다.
2. grid 배열을 순회하며 각 요소인 내부 배열에 하나씩 접근한다.
3. 각 배열마다 이분 탐색을 진행한다.
4. 이분 탐색을 통해 내부 배열의 요소가 음수인 경우 answer을 1씩 증가해준다.
5. 정답 answer을 반환한다.
Solution - 2
1. 정답을 반환할 임의의 변수 answer을 선언하고 0을 할당한다.
2. 이중 반복문을 통해 이중 배열을 순회하며 각 요소의 값이 음수인 경우 answer의 값을 증가시키는 삼항 연산식을 작성한다.
3. 정답 answer을 반환한다.

 

[작성 코드]

/**
 * @param {number[][]} grid
 * @return {number}
 */
var countNegatives = function(grid) {
    //sol - 1
    let answer = 0
    for(const value of grid){
        let lo = 0
        let hi = value.length - 1
        while (lo <= hi){
            const mid = Math.floor(lo + (hi - lo) / 2 )
            if (value[mid] < 0){
                answer += hi - mid + 1
                hi = mid - 1
            }else{
                lo = mid + 1
            }
        }
    }
    return answer
    //sol - 2
    let answer = 0;
    for(let i = 0; i<grid.length;i++){
        for(let j = 0; j<grid[0].length;j++){
            grid[i][j] < 0 ? answer++ : null
        }
    }
    return answer;
};

 

[문제 회고]

이분 탐색의 풀이에 대해 좀 익숙해져서 이분 탐색 알고리즘을 사용하는데에 어려움은 없었지만 디테일 함이 부족하다는 것을 느꼈다. 또한 이분 탐색보다 이중 반복문을 통해 구현을 하였을 때 더 효율적으로 보였지만 시간 복잡도와 공간 복잡도를 따져보며 다시 공부를 해보며 이분 탐색의 장점을 생각해 볼 필요성을 느꼈다.