GitHubSeob

C++ / 프로그래머스 / 멀쩡한 사각형 본문

Programmers/Level 2

C++ / 프로그래머스 / 멀쩡한 사각형

GitHubSeob 2022. 4. 14.

문제

https://programmers.co.kr/learn/courses/30/lessons/62048

 

코딩테스트 연습 - 멀쩡한 사각형

가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을

programmers.co.kr

문제풀이

주어진 w와 h 이용해서 직선의 방정식을 세우고 x값을 넣으면서 y값을 구하고 버림을 한 값을 모두 더한 값에 *2를 한다.

직선의 방정식은 y=-3x/2+12.

x가 7이면 12-10.5 = 1.5인데 직선과 겹치는 정사각형은 사용할 수 없으므로 버림을 한 값인 1을 저장한다.

x가 6이면 12-9 = 3

...

x가 1이면 12-1.5 = 10.5 -> 10

값을 모두 더하면 40이 된다.

직선 기준으로 아래 정사각형만 구했으므로 *2를 하여 위 정사각형도 구한다.

 

 

코드

#include <cmath>

using namespace std;

long long solution(int w, int h) {
    long long answer = 0;
    double x(0);
    double fx(0);

    for (x = w; x > 0; --x) {
        fx = (double)h * x / (double)w * -1 + (double)h;
        answer += int(floor(fx));
    }

    return answer * 2;
}