알고리즘 ( C++ )/프로그래머스

[프로그래머스] 카카오 캠핑 c++

kwoss2341 2021. 1. 27. 19:01

https://programmers.co.kr/learn/courses/30/lessons/1833

 

코딩테스트 연습 - 캠핑

캠핑 무지를 돌보느라 지친 콘은 한적한 시골의 한 캠핑장에 놀러 갔다. 캠핑장은 텐트를 칠 수 있는 넓은 평지를 제공하고 있는데, 이 평지에는 이미 캠핑장에서 설치해 놓은 n개의 쐐기가 박혀

programmers.co.kr

 

기본적인 아이디어.

 

1.  x축으로 내림차순정렬.

2.  [ 정점: i (x,y) ( 0<= i < n ) ]에 관하여 [정점: i] 와[ 정점: it (tx,ty) ( i< it <n ) ] 사이 내부의 쐐기가 없어야 한다.

3.  [ 정점:  j (jx,jy) ( i< j <it ) ] 의 좌표 (jx,jy) (x,y) , (tx,ty) 사이에 하나라도 존재하지 않으면 answer ++;

 

 

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;


bool cmp(vector <int> a, vector <int> b)
{
    return a[0]<b[0];
}


//https://programmers.co.kr/learn/courses/30/lessons/1833
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<vector<int>> data) {
    int answer = 0;
    
    
    sort(data.begin(),data.end(),cmp);
    
    int x,y;
    int mx,my;
    int px,py;
    int tx,ty;
    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];
            
            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++;
        }
    }
    
    return answer;
}

 

카카오 캠핑 실행시간