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++]' 카테고리의 다른 글
백준_1756_피자굽기_c++ (0) | 2022.07.27 |
---|---|
백준_16931_겉넓이구하기_c++ (0) | 2022.07.27 |
백준_개근상_1563_C++ (0) | 2022.07.27 |
[백준] 1141_접두사_c++ (0) | 2022.07.27 |
[백준] 괄호제거_2800_C++ (0) | 2022.07.27 |