본문 바로가기
Problem Solving

[C++] [백준 17211] 좋은 날 싫은 날 (pps 3-5)

by tls1107 2021. 7. 13.
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

 

17211번: 좋은 날 싫은 날

지은이가 건국한 나라인 유애나에 살고 있는 재현이는 너무 단순한 나머지 매일이 기분이 좋은 날, 기분이 싫은 날 두가지로 나누어진다. 어느 날 지은이는 재현이에 대한 놀라운 사실을 발

www.acmicpc.net


풀 때 어려웠던 점 또는 느낀점 :

솔직히 이 문제는 문제를 이해하는게 더 어려웠다.

그리고 나서 확률 문제를 풀어본 경험이 적어서 인지

처음에 막막했다.

무조건 기분이 좋을 확률을 전부 더해보는 방법도 사용해봤지만

정답일리가 없었다.

여기저기 구글링도 해보며 문제를 다시 읽어보기도 하면서

푸는 법을 이해했다.

확률 문제를 좀 더 다뤄봐야 할 필요가 있다.


개선방안 :

#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
반응형

댓글