
보라 : 부호
빨강 : 지수
초록 : 소수 (비트가 1/2, 1/4 ... 를 의미)
Q. 십진법으로 소수 표현하면 되지 않음?
: IEEE 754에 Binary 뿐 아니라 Decimal도 있긴 한데 컴퓨터는 이진법 계산이 훨씬 빨라서 이진법 쓰는거
bool compare_y(vi a, vi b)
{
return a[1] < b[1];
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
int solution(int n, vector<vector<int>> data) {
int answer = 0;
// 두 성분의 순위가 붙어있어야 한다
// x에 대해 정렬, y에 대해 정렬
// 정렬한 두 data를 순회하면서 map의 pair에 순위를 기록
// for문 2개로 원본 data 순회하면서 두 성분의 순위차가 1인지 확인
// 예외 : 외부에 있지만 순위만 추가시키는 요소들이 있으면 집계 안됨
vvi xSortData = data;
sort(xSortData.begin(),xSortData.end());
vvi ySortData = data;
sort(ySortData.begin(),ySortData.end(),compare_y);
map<pii,pii> rank; // first : x, second : y
int r = 1, pre = 0;
int x, y;
for(int i=0; i<n; i++)
{
x = xSortData[i][0];
y = xSortData[i][1];
if(pre == x) { rank[{x,y}].first = r; }
else { rank[{x,y}].first = ++r; }
pre = x;
}
r = 1, pre = 0;
for(int i=0; i<n; i++)
{
x = ySortData[i][0];
y = ySortData[i][1];
if(pre == y) { rank[{x,y}].second = r; }
else { rank[{x,y}].second = ++r; }
pre = y;
}
int rix,riy,rjx,rjy;
for(int i=0; i<n; i++)
{
for(int j=i+1; j<n; j++)
{
pii ip = {data[i][0], data[i][1]};
pii jp = {data[j][0], data[j][1]};
tie(rix, riy) = rank[ip];
tie(rjx, rjy) = rank[jp];
bool xgap1 = rix-rjx==1 || rix-rjx==-1;
bool ygap1 = riy-rjy==1 || riy-rjy==-1;
if(xgap1 || ygap1) answer++;
// cout << ip.first << ' ' << ip.second << ' ' << jp.first << ' ' << jp.second << '\n';
// cout << rix << ' ' << riy << ' ' << rjx << ' ' << rjy << '\n' << '\n';
}
}
return answer;
}
아예 접근을 잘못 했다. 내일 다시.