티스토리 뷰
728x90
반응형

정보 올림피아드 8578번 또래
https://jungol.co.kr/problem/8578
또래 · Bronze I
Bronze I · 307 solved users · 694 submissions
jungol.co.kr
* 사용언어 : C언어, C++
1. 문제
N명(최대 20만)의 사람의 나이가 1부터 10^9 사이 자연수로 주어짐
나이 차이가 가장 작은 2명을 골라 그 둘의 나이 차이를 출력
2. 풀이
N명의 나이를 오름차순 혹은 내림차순으로 정렬합니다.
그리고 i를 0부터 N - 2까지 반복하면서 i번째의 값과 i + 1번째 값의 차이를 계산하고(diff)
이를 최소값과 비교하여 더 작은 경우 최소값을 갱신합니다.
반복문을 마친 뒤 최소값을 출력하면 됩니다.
N개의 숫자를 정렬하는 것은 시간 복잡도가 (nlogn)인 merge sort를 사용했습니다.
시도해보지는 않았으나 시간 복잡도가 O(n^2)인 삽입 정렬, 선택 정렬 등을 사용하면 TLE가 나올 것 같습니다.
3. 코드
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#define ABS(X) ((X) > 0 ? (X) : (-(X)))
const int LM = 200000;
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);
int min = (1 << 30);
for (int i = 0; i < N - 1; ++i) {
int diff = ABS(arr[i] - arr[i + 1]);
if (diff < min) min = diff;
}
printf("%d\n", min);
return 0;
}728x90
반응형
'개발자 > 문제풀이(C)' 카테고리의 다른 글
| [정올/JUNGOL] 12338번 구구단 1 (C/C++) (0) | 2026.05.31 |
|---|---|
| [정올/JUNGOL] 502번 출력 - 자가진단2 (C/C++) (0) | 2026.05.28 |
| [정올/JUNGOL] 9002번 출력 - 연습문제2 (C/C++) (0) | 2026.05.28 |
| [정올/JUNGOL] 501번 출력 - 자가진단1 (C/C++) (0) | 2026.05.28 |
| [정올/JUNGOL] 9001번 출력 - 연습문제1 (C/C++) (0) | 2026.05.28 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자동차보험
- 알고리즘 리더
- 시대예보
- 문현공
- 정세현의통찰
- 자료구조
- 항상 이기는 조직
- 아가별
- 독서 감상평
- 관계가상처가되기전에
- 알고리즘
- 이상감지
- JUNGOL
- 동탄에듀센터
- 동탄에듀센터2
- 구구단 1
- 똑똑하고게으르게
- 영화감상평
- 쿠프마케팅
- 독서감상평
- 12338
- 삼성전자
- 나의첫죽음학수업
- 시스템개발자
- 정올
- 여가포인트
- 이용제한
- 센터독서클럽
- 마침내 특이점이 시작된다
- 당신도느리게나이들수있습니다
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함