728x90
반응형
문제 풀기 전 생각 :
/*
0) (기분 좋은 날) 다음날 기분 좋을 확률
1) (기분 좋은 날) 다음날 기분 안 좋을 확률
2) (기분 안 좋은 날) 다음날 기분 좋을 확률
3) (기분 안 좋은 날) 다음날 기분 안 좋을 확률
N일째에 기분이 좋을 확률은 :
N-1 일째가 기분 좋은 날 일수도 있고 안 좋은 날 일수도 있다.
따라서 두 가지 경우의 확률 모두 더해야 N일째 기분이 좋을 확률이다.
N일째에 기분이 안 좋을 확률 또한 위와 같다.
두 가지 경우 모두 고려해야 한다.
따라서
tmp1 = h*m[0] + s*m[2];
tmp2 = s*m[3] + h*m[1];
h = tmp1;
s = tmp2;
로 반복한다면 기분 좋을 확률과 기분이 안 좋을 확률을 구할 수 있다.
*/
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int N,n;
double m[4],h=0,s=0,tmp1,tmp2;
cin >> N >> n;
cin >> m[0] >> m[1] >> m[2] >> m[3];
if(n == 1){
h = m[2];
s = m[3];
}
else if(n == 0){
h = m[0];
s = m[1];
}
for(int i=0 ; i < N-1 ; i++){
tmp1 = h*m[0] + s*m[2];
tmp2 = s*m[3] + h*m[1];
h = tmp1;
s = tmp2;
}
h = h*1000;
s = s*1000;
cout << (int)h << endl;
cout << (int)s << endl;
return 0;
}ㅊ
https://www.acmicpc.net/problem/17211
풀 때 어려웠던 점 또는 느낀점 :
솔직히 이 문제는 문제를 이해하는게 더 어려웠다.
그리고 나서 확률 문제를 풀어본 경험이 적어서 인지
처음에 막막했다.
무조건 기분이 좋을 확률을 전부 더해보는 방법도 사용해봤지만
정답일리가 없었다.
여기저기 구글링도 해보며 문제를 다시 읽어보기도 하면서
푸는 법을 이해했다.
확률 문제를 좀 더 다뤄봐야 할 필요가 있다.
개선방안 :
#include <stdio.h>
double a, b, c, d;
double p, q;
int main(void) {
int i, n;
scanf("%d %d", &n, &i);
if (i == 1) q = 1.0;
else p = 1.0;
scanf("%lf %lf %lf %lf", &a, &b, &c, &d);
for (i = 1; i <= n; i++) {
double x = a*p + c*q;
double y = b*p + d*q;
p = x, q = y;
}
printf("%d\n%d\n", (int)(1000 * p), (int)(1000 * q));
return false;
}
나는 ceil() 함수를 사용했는데 그럴 필요는 없었던것 같다.(그래서 수정했다)
전체적으로 아직 갈 길이 멀다는 것을 알 수 있었다
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[C++] [LeetCode 38] Count and Say (ops 3-8) (1) | 2021.07.16 |
---|---|
[C++] [LeetCode 860] Lemonade Change (pps 3-7) (0) | 2021.07.16 |
[C++] [백준 5598] 카이사르 암호 (pps 3-3) (0) | 2021.07.13 |
[C++] [백준 11721] 열 개씩 끊어 출력하기 (pps 3-2) (0) | 2021.07.13 |
3-1. Student Attendance Record I (LeetCode 551) (0) | 2021.07.10 |
댓글