fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 1183 (C++) 약속
최초 업로드: 2025-09-03 06:24:04
최근 수정 시간: 2025-09-03 06:24:27
게시자: rlatjwls3333
카테고리: 백준
조회수: 6
# [Silver II] 약속 [문제 링크](https://www.acmicpc.net/problem/1183) ## 문제 설명 <p>마법사 N명이 머글 문화를 이해하기 위해 머글과 약속을 잡았다. 각 마법사는 한 명의 머글을 만날 예정이다. 하지만, 마법사는 약속 시간보다 빨리 또는 늦게 도착할 수 있기 때문에 고민에 빠졌다. 결국 기다리는 시간을 최소화 하기 위해 모든 약속 시간을 T씩 미루려고 한다. 기다리는 시간은 먼저 도착한 사람이 늦게 도착한 사람이 도착할 때까지 기다리는 시간을 의미한다.</p> <p>마법사의 약속 시간은 A<sub>1</sub>, A<sub>2</sub>, ..., A<sub>N</sub>이고, 도착 시간은 B<sub>1</sub>, B<sub>2</sub>, ..., B<sub>N</sub>이다. 약속 시간을 T만큼 미루면, 기다리는 시간의 합은 |A<sub>i</sub> + T - B<sub>i</sub>|의 합과 같다. 기다리는 시간의 합이 최소가 되는 서로 다른 정수 T의 개수를 구해보자.</p> ## 입력 <p>첫째 줄에 N이 주어진다. 다음 N개의 줄에 A<sub>i</sub>, B<sub>i</sub>가 주어진다.</p> ## 출력 <p>첫째 줄에 기다리는 시간의 합이 최소인 서로 다른 정수 T의 개수를 출력한다.</p> ## 풀이 차이들을 저장해서 정렬한 후 최대한 중앙값이 0이 되도록 조정하면 됩니다. 짝수일 땐, 중앙값이 2개여서 둘 사이에 있는 모든 값이 가능합니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> diffs; for(int i=0;i<n;i++) { int a, b; cin >> a >> b; diffs.push_back(a-b); } sort(diffs.begin(), diffs.end()); cout << abs(diffs[n/2] - diffs[(n-1)/2])+1; } ```