프로그래밍 알고리즘

[정올 2499] 저울

꾸준한사람 2023. 1. 8. 22:33
반응형

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1760&sca=99&sfl=wr_hit&stx=2499 

 

JUNGOL

 

www.jungol.co.kr

#include <stdio.h>

int N, Cnt, arr[1010], arr2[1010], sum;

void mergesort(int s, int e) {
	if (s >= e) return;
	int m = (s + e) / 2;
	mergesort(s, m);
	mergesort(m + 1, e);
	int k = s, a = s, b = m + 1;
	while (a <= m && b <= e) {
		if (arr[a] < arr[b]) arr2[k++] = arr[a++];
		else arr2[k++] = arr[b++];
	}
	while (a <= m) arr2[k++] = arr[a++];
	while (b <= e) arr2[k++] = arr[b++];
	for (int i = s; i <= e; i++) arr[i] = arr2[i];
}

//정렬 후에 1번부터 시작하며, 각 
int main(void) {
	scanf("%d", &N);
	for (int i = 0; i < N; i++) scanf("%d", arr + i); //입력
	mergesort(0, N - 1); //정렬
	if (arr[0] != 1) printf("1\n"); //제일작은게 1이 아니면 1이 답
	else {
		sum = arr[0];
		for (int i = 1; i < N; i++) { //작은 값부터 돌면서
			if (sum + 1 >= arr[i]) sum += arr[i]; //다음 숫자와 갭이 있다면, 최소값은 1을 더한 것일 것임, 
			//다 더한 값보다 다음 숫자가 더 크다는 것은, 그 갭에서 가장 작은 숫자인 sum + 1이 최소값이라는 것
			//차례대로 갔을 때 이 조건이 보장되지 않는데, 뒤에서 답이 나올 경우는 없다.
			else break; //현재의 s
		}
		printf("%d\n", sum + 1);
	}
	return 0;
}
반응형

'프로그래밍 알고리즘' 카테고리의 다른 글

[정올 2514] 문자열 찾기  (0) 2023.01.09
[정올 2501] 모양 정돈  (0) 2023.01.08
[정올 2498] 공약수  (0) 2023.01.08
[정올 2497] 수열  (0) 2023.01.08
[정올 2468] 비밀번호  (0) 2023.01.08