※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 21666번 문제인 Треугольник Максима이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/21666 

 

21666번: Треугольник Максима

Первая строка входного файла содержит целое число n – количество нот, которые воспроизводил Максим с помощью тюнера (2 ≤ n ≤ 1000). Последующие

www.acmicpc.net

어떤 수 X가 두 수 A와 B중 어느쪽 수와 더 가까운지를 나타내는 정보를 이용해 가능한 X값의 범위를 추려내는 문제이다.

A와 B가 다르다면, mid := (A+B)/2의 값을 기준으로 더 가까운 쪽 수의 방향으로 범위에 대한 단서를 얻을 수 있다. 이러한 단서를 모아 문제를 해결하자.

 

A와 B의 값이 같다면 이 때 주어지는 정보는 아무런 의미가 없음에, 즉 아무런 처리도 안하고 건너뛰어야 함에 유의하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
using namespace std;
typedef long double ld;

ld L = 30, R = 4000;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cout << fixed;
	cout.precision(20);

	int T; cin >> T;
	ld old; cin >> old;
	for (int t = 1; t < T; t++) {
		ld cur; string s; cin >> cur >> s;
		if (old == cur) continue;
		if (s == "closer") {
			if (cur < old) {
				R = min(R, (cur + old) / 2);
			}
			else L = max(L, (cur + old) / 2);
		}
		else {
			if (cur < old) L = max(L, (cur + old) / 2);
			else R = min(R, (cur + old) / 2);
		}
		old = cur;
	}

	cout << L << ' ' << R;
}
728x90

+ Recent posts