티스토리 뷰
728x90
반응형

https://jungol.co.kr/problem/8573
* 사용언어 : C언어, C++
1. 문제
수직선 위의 x 좌표에 살고 있는 N명이 한 명의 집에 모일 때,
사람들의 이동 비용의 합이 최소가 되려면 어떤 x 좌표에 모여야 하는지 출력
여러 개인 경우 오름차순으로 출력
2. 풀이
중위값(median)은 N개의 숫자를 정렬했을 때 중앙에 있는 값을 의미합니다.중위값은 모든 값과의 편차를 더한 값(이 경우 이동 비용의 합)이 가장 작다는 특성이 있습니다.따라서 주어진 x 좌표들을 오름차순 혹은 내림차순으로 정렬한 뒤 중위값을 출력하면 됩니다.
다만 예제에도 나왔듯 N이 짝수인 경우를 잘 처리해주어야 합니다.
원래 N이 짝수인 경우 중위값은 가운데 2개의 값을 평균내어 계산하는데,
이 문제는 평균을 내지 않고 가운데 2개를 오름차순으로 출력합니다.
N이 홀수인 경우에는 가운데 값(N / 2 번째 값) 하나만 출력하면 됩니다.
다만, N이 짝수이더라도 가운데 2개의 값이 같다면 한 번만 출력해야 합니다. (예제 #3)
N이 1인 경우도 edge 케이스로 고려해봤는데
이 경우 홀수이면서 N / 2 == 0이 되므로 추가적인 처리를 하지 않아도 됩니다.
3. 코드
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
const int LM = 100000;
int N, arr[LM], tmp[LM];
void mergeSort(int s, int e) {
if (s >= e) return;
int m = (s + e) / 2;
mergeSort(s, m);
mergeSort(m + 1, e);
int i = s, j = m + 1, k = s;
while (i <= m && j <= e) {
if (arr[i] < arr[j]) tmp[k++] = arr[i++];
else tmp[k++] = arr[j++];
}
while (i <= m) tmp[k++] = arr[i++];
while (j <= e) tmp[k++] = arr[j++];
for (i = s; i <= e; ++i) arr[i] = tmp[i];
}
int main() {
scanf("%d ", &N);
for (int i = 0; i < N; ++i) scanf("%d ", &arr[i]);
mergeSort(0, N - 1);
if (N % 2 == 1 || arr[N / 2 - 1] == arr[N / 2]) printf("%d\n", arr[N / 2]);
else printf("%d %d\n", arr[N / 2 - 1], arr[N / 2]);
return 0;
}
728x90
반응형
'개발자 > 문제풀이(C)' 카테고리의 다른 글
| [정올/JUNGOL] 8577번 회의 정렬 (C/C++) (0) | 2026.06.21 |
|---|---|
| [정올/JUNGOL] 1692번 곱셈 (C/C++) (0) | 2026.06.21 |
| [정올/JUNGOL] 1291번 구구단 4 (C/C++) (0) | 2026.06.21 |
| [정올/JUNGOL] 1341번 구구단 3(C/C++) (0) | 2026.06.21 |
| [정올/JUNGOL] 12422번 구구단 2 (C/C++) (0) | 2026.06.21 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 여가포인트
- 자료구조
- JUNGOL
- 구구단 3
- 정올
- 독서감상평
- 나의첫죽음학수업
- 마침내 특이점이 시작된다
- 12422
- 12338
- 독서 감상평
- 쿠프마케팅
- 삼성전자
- 문현공
- 영화감상평
- 이상감지
- 구구단 4
- 자동차보험
- 아가별
- 센터독서클럽
- 항상 이기는 조직
- 구구단 2
- 관계가상처가되기전에
- 회의 정렬
- 구구단 1
- 똑똑하고게으르게
- 시스템개발자
- 알고리즘
- 알고리즘 리더
- 이용제한
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함
