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

 

이번에 볼 문제는 백준 25905번 문제인 장인은 도구를 탓하지 않는다이다.
문제는 아래 링크를 확인하자.

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

 

25905번: 장인은 도구를 탓하지 않는다

BaekJoonOnline은 프로그래밍 언어를 사용하여 퀴즈를 푸는 정말정말 흥미로운 게임이다. 하지만 실력에 정체기가 온 성현이는 자신의 실력을 도구 탓으로 돌리고 노트북을 강화하기로 하였다. 주

www.acmicpc.net

사용할 9개의 강화망치를 선택했다면, 어떤 순서로 망치를 사용하더라도 강화에 성공할 확률은 일정하다는 점을 관찰하자.

 

따라서 10개의 망치중 9개의 망치를 고르는 총 10가지 경우의 수를 살펴 문제를 해결할 수 있다.

각 소수는 많아야 소수점 아래 두자리까지만 주어지고 소수의 곱셈은 정수형태로 바꿔 계산 후 적절한 위치에 소수점을 찍듯이 할 수 있다는 점을 이용해, 위의 확률을 계산하는 과정에서 실수 연산을 단 한 번만 사용하게끔 계산식을 정리할 수 있다. 이를 이용해 문제를 해결하자.

 

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

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

ll p[10];
ll mx = 0, X = 1;

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

	for (ll i = 2; i < 10; i++) X *= i;

	for (int i = 0; i < 10; i++) {
		string s; cin >> s;
		if (s[0] == '1') p[i] = 100;
		else if (s.length() == 3) p[i] = (s[0] - '0') * 100 + (s[2] - '0') * 10;
		else p[i] = (s[0] - '0') * 100 + (s[2] - '0') * 10 + (s[3] - '0');
	}

	for (int k = 0; k < 10; k++) {
		ll tmp = 1;
		for (int i = 0; i < 10; i++) {
			if (i == k) continue;
			tmp *= p[i];
		}
		mx = max(mx, tmp);
	}

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

	cout << ((double)mx) / 362880000000000LL;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 27435 // C++] 파도반 수열 2  (0) 2023.02.09
[BOJ 9461 // C++] 파도반 수열  (0) 2023.02.09
[BOJ 2520 // C++] 팬케이크 사랑  (0) 2023.02.09
[BOJ 1092 // C++] 배  (0) 2023.02.08
[BOJ 11522 // C++] Sum Kind of Problem  (0) 2023.02.07

+ Recent posts