본문 바로가기
컴퓨터/알고리즘

[SWEA] 9700. USB 꽂기의 미스터리 (문제 꼼꼼히 읽어야하는 이유)

by IT황구 2021. 2. 20.
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AXDNEA3aaU0DFAVX&categoryId=AXDNEA3aaU0DFAVX&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=2

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

#include<cstdio>
#include<algorithm>
typedef long long ll;
using namespace std;
int main(void)
{
	int tc;
	double s1,s2,p,q;
	scanf("%d",&tc);
	for(int i = 0; i < tc; i++)
	{
		scanf("%lf %lf",&p,&q);
		printf("#%d %s\n",i+1,(1-p)<(1-q)*p?"YES":"NO");
	}	
	return 0;
}

시행착오 :

- 가장 처음 USB를 꽂을 때, p의 확률로 올바른 면으로 USB를꽂은 것이고 ,

(1 - p)의 확률로는 뒤집어서 USB를 꽂은 것이다.

 

- 만약 올바른 면으로 USB를 꽂으면 q의 확률로 정상적으로 USB가 꽂히고,

(1 - q)의 확률로는 꽂히지 않는다. USB가 뒤집어져 있다면 절대로 꽂히지 않는다.

 

- USB를 꽂는 것을 실패하면 USB를 뒤집은 다음 다시 꽂는 것을 시도한다.

1. s1을 구하는 식

뒷면으로 꽂음 -> 앞면으로 바꿈 -> 성공

2. s2를 구하는 식

앞면으로 꽂음 ->실패 -> 뒷면으로 꽂음-> 앞면으로 바꿈-> 성공

이 과정을 식으로 표현하면 되는데

s1 을 예시로 들면

(1-p) + p * q 이런식으로 생각을 했었다. 앞면으로 바꾸면 올바른 면으로 꽂았다 생각하고 p를 계속 곱했다.

정신이 나간놈인가보다.. 가장 "처음" .. "처음" .. "처음" .. "처음" .. "처음" .. "처음" .. "처음" .. "처음" .. "처음" .. "처음" .. "처음" ..

처음에 저게 안되고나서, 음 뭐야.. 뒤집는걸 +가 아닌 *으로 연결해야하나? 아 뭔가 이상한데..하면서 곱도 해봤지만 당연히 되지 않았다.

그다음엔

s1,s2 에서 뒷면으로 꽂음 -> 앞면으로 바꿈 -> 성공 이 같은 모듈이란걸 확인했다.

s1 < s1 + 앞면으로 꽂음 +실패를 표현하는건

s1 < s1+ p *(1-q) 인데

이걸 만족하려면 s1이 음수여야 만족을 했다. 근데 s1은 양수이다. 그래서 아 전제자체가 틀려먹었구나 라고 생각을 했다.

그 이후 문제를 다시 보니 처음이라고 해서

s1 = 처음에 뒷면(1-p) + (앞면으로 뒤집고 연결 성공) q

s2 = 처음에 앞면 (p) * 실패(1-q) + (뒷면)+(앞면 성공 q)

s1 = (1-p) + q

s2 = p * (1-q) + q 이다.

s1 < s2 에서 q는 양수이므로 필요없다.

(1-p) < p*(1-q) 를 만족하는 식을 찾으면 되는것이었다.

저 식을 보고 1초만에 풀렸다.

문제를 잘 읽어야겠다..

"처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" .."처음" ..

===============END====

 

728x90
반응형