ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 카카오캠핑 Lv2
    Computer Science/프로그래머스 2023. 10. 9. 19:53

    나는 이 문제를 2차원 배열을 x좌표에 대해서 오름차순으로 정리했다.

    그러면 위와 같은 사각형 꼴로 정렬이 된다. (정확하게는 y축도 정렬을 해주긴 해야한다)
    첫번째로 (1, 1)을 선택하고 이후에 있는 (3, 2) 를 선택 후 (2, 2)가 범위 안에 있는지 검사하는 꼴로
    문제를 풀면된다.

    (1, 1)을 선택하고 이후에 있는 (3, 2) 를 선택
    이 부분의 구현은 min max 함수를 사용하고 행과 열이 일치하는 좌표가 있는지 검사하면된다.

        for(int i=0; i<n; i++)
        {
            x=data[i][0];
            y=data[i][1];
            for(int j=i+1; j<n; j++)
            {
                tx=data[j][0];
                ty=data[j][1];​

    그 뒤 배열을 탐색하면서, 현재 선택한 좌표와 다음 선택한 좌표를 min, max 함수를 사용해 사각형이 되도록 코드를 짰다.
    mx=min(x,tx);
    my=min(y,ty);
    px=max(x,tx);
    py=max(y,ty);
    
    if(mx==px||my==py) continue;​

    그 뒤 이 사각형 안에 다른 좌표가 있는지 검사했다.
    int sw=0;
    int jx,jy;
    for(int k=i+1; k<j; k++)
    {
        jx=data[k][0];
        jy=data[k][1];
        if(jx>mx&&jx<px&&jy>my&&jy<py)
        {
            sw=1;
            break;
        }
    }
    
    if(sw==0) answer++;​

     

    코드를 짜면서,,
    if(kx >= mx && kx <= px && ky => my && ky <= py)
    {
        sw = 1;
        break;
    }​
    변에 있는 부분의 좌표도 체크를 했는데,,,지문에서는 변에 있는 좌표는 괜찮다고 나와있다,,,
    문제를 꼼곰히 읽자!
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
    
    bool cmp(vector<int> lhs, vector<int> rhs)
    {
        if(lhs[0] < rhs[0])
            return true;
        else
            return false;
    }
    int solution(int n, vector<vector<int>> data) {
        int answer = 0;
        int cx, cy;
        int mx, my;
        int px, py;
        
        sort(data.begin(), data.end(), cmp);
        for(int i = 0; i < n; ++i)
        {
            cx = data[i][0];
            cy = data[i][1];
            
            for(int j = i + 1; j < n; ++j)
            {
                int jx = data[j][0];
                int jy = data[j][1];
                
                mx = min(jx, cx);
                my = min(jy, cy);
                px = max(jx, cx);
                py = max(jy, cy);
                
                if(mx == px || my == py) continue;
                
                int sw = 0;
                int kx, ky;
                
                for(int k = i + 1; k < j; ++k)
                {
                    kx = data[k][0];
                    ky = data[k][1];
                    
                    if(kx > mx && kx < px && ky > my && ky < py)
                    {
                        sw = 1;
                        break;
                    }
                }
                
                if(sw == 0) ++answer;
            }
        }
        return answer;
    }​

     
Designed by Tistory.