본문 바로가기

알고리즘/백준[C++]

백준_7571_점모으기_c++

728x90
반응형

https://www.acmicpc.net/problem/7571

 

7571번: 점 모으기

첫 줄에는 격자공간의 크기와 점들의 개수를 나타내는 두 정수 N과 M이 하나의 공백을 사이에 두고 주어진다. 다음의 M줄에는 각 줄마다 격자공간내의 점의 위치를 나타내는 두 개의 정수가 하나

www.acmicpc.net

풀이

문제자체는 정말 단순한데  "m/2를 했을때 중간점이 2개이상 나올 수 있는데 상관이없나?" 라는 의문이 드는 문제였습니다. 다시한번 생각해보니 중간점이 여러개가 나와도 결국 점들이 중간점으로 이동할 떄 필요한 거리의 합은 똑같기떄문에 문제없이 풀립니다. 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

vector<int> vx;
vector<int> vy;

int main() {
	int n, m;
	cin >> n >> m;

	for (int i = 0; i < m; i++) {
		int y, x;
		cin >> y >> x;
		vy.push_back(y);
		vx.push_back(x);
	}

	sort(vy.begin(), vy.end());
	sort(vx.begin(), vx.end());

	// 중간값으로 거리를 잡는다.
	int mx = vx[m / 2];
	int my = vy[m / 2];

	int ans = 0;
	for (int i = 0; i < m; i++) {
		ans += abs(vx[i] - mx) + abs(vy[i] - my);
	}
	cout << ans;

}
728x90
반응형

'알고리즘 > 백준[C++]' 카테고리의 다른 글