danbibibi
article thumbnail

1. 문제

문제 바로가기> BOJ 2230번: 수 고르기

 

2230번: 수 고르기

N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어

www.acmicpc.net

 

2. 풀이

정렬과 투 포인터를 이용하여 O(nlogn) 안에 문제를 해결할 수 있다.

<cpp />
#include<iostream> #include<algorithm> #define MAX 100001 using namespace std; int N, M; int num[MAX]; void input() { cin >> N >> M; for (int i = 0; i < N; i++) cin >> num[i]; } void solution() { sort(num, num + N); int ans = 2000000001, l = 0, r = 1, diff; while (r < N) { diff = num[r] - num[l]; if (diff >= M) { ans = min(ans, diff); l++; } else r++; } cout << ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); input(); solution(); }

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 2304번: 창고 다각형  (0) 2023.09.05
BOJ 17485번: 진우의 달 여행 (Large)  (0) 2023.09.04
BOJ 16928번: 뱀과 사다리 게임  (0) 2023.08.29
BOJ 1347번: 미로 만들기  (0) 2023.08.08
BOJ 9207번: 페그 솔리테어  (1) 2023.05.16
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로