[C++] 백준 1059. 좋은 구간

멋진감자·2025년 1월 2일
0

알고리즘

목록 보기
60/64
post-thumbnail

문제

입출력

풀이

입력을 모두 받은 뒤, n보다 작은 첫 수와 n보다 큰 첫 수를 구한다.
각각에서 1을 더하고 뺀 값이 탐색할 범위와 같다.
이 때 n이 집합 안에 있으면 일찍 퇴근시킨다.
구간 [A, B]에서 A에 올 수 있는 건 n보다 작거나 같은 수이다.
for문으로 A를 열어주고, n이 포함되는 경우의 수를 카운트하면 된다.

코드

#include <iostream>
#include <algorithm>
#include <set>
using namespace std;

int main() {
	int L, n, tmp;
	set<int> s;

	cin >> L;
	for (int i = 0; i < L; i++) {
		cin >> tmp;
		s.insert(tmp);
	}
	cin >> n;

	int l = 0;
	int r = 0;
	for (auto i : s) {
		if (i == n) {
			cout << "0";
			return 0;
		}
		if (i > n) break;
		l = max(l, i);
	}
	for (auto i : s) {
		if (i == n) {
			cout << "0";
			return 0;
		}
		if (i > n) {
			r = i;
			break;
		}
	}

	int ans = 0;
	for (int i = l + 1; i <= n; i++) {
		for (int j = i + 1; j < r; j++) {
			if (i < n && j < n) continue;
			ans++;
		}
	}		
	cout << ans;

	return 0;
}

넘의풀이내코드

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int L, a[50], n;
	cin >> L;
	for (int i = 0; i < L; i++) cin >> a[i];
	cin >> n;
	int l = 0;
	int r = 1e9;
	for (int i = 0; i < L; i++) {
		if (a[i] < n) l = max(l, a[i]);
		else r = min(r, a[i]);
	}
	cout << max(0, (n - l) * (r - n) - 1);
	return 0;
}

채점

아유 풀려서 다행이다 아직 안굳었구나야

넘의 풀이. 갸는 cstring하고 scanf 써서 메모리가 찌끄맸나봐

profile
난멋져

0개의 댓글