[C++로 풀이] (자료형의 중요성) 멀쩡한 사각형⭐⭐

Date:     Updated:

카테고리:

태그:

📌 멀쩡한 사각형

난이도 ⭐⭐

🚀 문제

image


🚀 내 풀이 ⭕

#include <cmath>

using namespace std;

long long solution(int w, int h) {
    long long answer = 1;
    long long cantuse = 0;

    for (long long i = 1; i <= w; i++)
        cantuse += (long long)ceil((long double)h * i / w) - (long long)floor((long double)h * (i - 1) / w);

    answer = (long long)w * h - cantuse;
    return answer;
}

image

✈ 자료형의 중요성 : 아주 큰 수의 곱셈과 나눗셈

h, w는 1 억 같은 큰 수일 수도 있다.

  • h / w 나누기를 먼저하면 오차가 더 크다. (h / w * i 로 진행할 경우 오차 大)
    • 실수(long double)끼리 나누면 소숫점이 어마어마하게 길어져서 그런지.. long double로도 감당 안될 수 있다.
    • 이런 상태에서 i까지 곱해버리면 오차 또한 i만큼 곱해져 더 거대해진다.
  • h * i 곱하기를 먼저한 후 나누면 오차가 위보다 덜 할 것. (h * i / w 로 진행할 경우)
  • 사칙연산 순서를 h / w * i 에서 h * i / w 로 변경하니 해결 되었다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기