백준15975 화살표 그리기 작성일 2021-02-27 | In KOI 문제 링크 http://icpc.me/15975 문제 출처 2018 KOI 고등부 1번 사용 알고리즘 정렬 시간복잡도 $O(N \log N)$ 풀이 색깔마다 좌표를 정렬한 상태로 저장한 뒤, 인접한 원소의 차를 계산하면 됩니다. 전체 코드 12345678910111213141516171819202122232425262728293031323334353637383940/****************************** Author: jhnah917(Justice_Hui) g++ -std=c++17 -DLOCAL ******************************/ #include <bits/stdc++.h> #define x first #define y second #define all(v) v.begin(), v.end() #define compress(v) sort(all(v)), v.erase(unique(all(v)), v.end()) #define IDX(v, x) (lower_bound(all(v), x) - v.begin()) using namespace std; using uint = unsigned; using ll = long long; using ull = unsigned long long; int N; vector<int> G[101010]; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> N; for(int i=1; i<=N; i++){ int a, b; cin >> a >> b; G[b].push_back(a); } for(int i=1; i<=N; i++) sort(all(G[i])); ll ans = 0; for(int i=1; i<=N; i++){ if(G[i].size() <= 1) continue; for(int j=0; j<G[i].size(); j++){ if(j == 0) ans += G[i][j+1] - G[i][j]; else if(j+1 == G[i].size()) ans += G[i][j] - G[i][j-1]; else ans += min(G[i][j+1] - G[i][j], G[i][j] - G[i][j-1]); } } cout << ans; }