2017 카카오코드 예선 문제이다. 이 문제를 풀 때는 문제를 이해하는데 시간이 오래 걸렸다. 주어지는 두 좌표가 텐트의 대각선에 해당한다는 점을 잘 이해해야한다. 먼저 x 좌표를 기준으로 정렬을 한 후, 반복문을 돌면서 하나씩 비교를 해가며 카운트를 세는 브루트포스 방식으로 문제를 해결하였다. 눈 여겨볼 점은 만약 두 좌표가 x나 y 중에 같은 위치에 있을 경우 넓이는 0이 되므로 continue
해주는 부분이다. 확실히 카카오 문제들은 지문이 길고 이해하기가 까다로운 문제들이 많다. 급할수록 천천히. 천천히 읽고 이해하자
#include <vector>
#include <algorithm>
using namespace std;
int solution(int n, vector<vector<int>> data) {
int answer = 0;
sort(data.begin(),data.end());
for(int i=0;i<n;i++) {
int x = data[i][0];
int y = data[i][1];
for(int j=i+1;j<n;j++) {
int nx = data[j][0];
int ny = data[j][1];
if(x==nx || y==ny) {
continue;
}
int maxY = y > ny ? y : ny;
int minY = y > ny ? ny : y;
bool tf = true;
for(int k=i+1;k<j;k++) {
int tx = data[k][0];
int ty = data[k][1];
if(tx>x && tx<nx && ty>minY && ty<maxY) {
tf = false;
break;
}
}
if(tf) {
answer++;
}
}
}
return answer;
}