Programmers/Level 2
C++ / 프로그래머스 / 멀쩡한 사각형
GitHubSeob
2022. 4. 14. 16:22
문제
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;
}