yarn33   2년 전

전체코드가 아니라 이 부분만 봐주시면 될 것 같습니다.

int ans2 = dpay; //  도우의 가격

int cal = dobcal; // 도우의 칼로리 

int ans = cal/ans2; // 토핑x일때 1원당 열량

for(int i=0; i<n; i++)

{

    if((cal + array[i])/(ans2+toppay) >= ans)        // 만약 토핑1개를 추가했을때의 1원당 열량이 이전ans값 보다 크다면. (array.Sort 와 Reverse를 통해 내림차순 정렬을 해 두었습니다) ------------- 문제의 = 부분입니다. >=로 하면 맞고 >로 하면 틀리는..

      {

             ans2 = ans2 + toppay;

             cal = cal + array[i];

             ans = cal/ans2;

}

else

{

break;

}

}

여기서 저  =부분을 뺴면 틀렸습니다가 나오고 포함하면 맞았습니다가 나옵니다.

여기서 궁금한것은 토핑을 추가했을때의 1원당 열량값이 그 전에 값과 "동일"하다면 break 후 그 전 열량값을 출력하더라도 답이 똑같다고 생각하는데 왜 틀렸는지 입니다.

토핑의 각 열량을 내림차순 정렬을 해 두었기에 토핑추가전과 후가 열량이 같다면 여기서 다른토핑을 더 추가한다 하더라도 1원당 열량이 내려가면 내려갔지 올라가진 않을텐데 말이죠..

index   2년 전

1원당 열량이 정확히 나누어 떨어지지 않고 소숫점 아래로 갈 수 있는데, 그 값이 ans + 0.x인 경우에는 ans로 버림이 되다 보니 실제로는 ans보다 큰 값이더라도 ans로 처리되어서 일어나는 일로 보이네요.

yarn33   2년 전

음 실제값이 0.x가 더 큰 값이더라도 문제에서 출력값에서 소수점을 버리라고했으니 ans로 처리되어 출력이 되더라도 출력값자체는 똑같은거 아닌가요?? ㅠㅠ 어렵네요

댓글을 작성하려면 로그인해야 합니다.