C++/Codeforces

C++[1A] Theatre Square 문제해석 및 풀이

S_Hoon 2020. 8. 4. 02:53

http://codeforces.com/problemset/problem/1/A

 

Problem - 1A - Codeforces

 

codeforces.com

Theatre Square in the capital city of Berland has a rectangular shape with the size n × m meters. On the occasion of the city's anniversary, a decision was taken to pave the Square with square granite flagstones. Each flagstone is of the size a × a.

What is the least number of flagstones needed to pave the Square? It's allowed to cover the surface larger than the Theatre Square, but the Square has to be covered. It's not allowed to break the flagstones. The sides of flagstones should be parallel to the sides of the Square.

 

Berland의 수도에 있는 극장은 직사각형이고 사이즈는 n x m 입니다. 도시의 기념일이 되면, 극장 바닥은 정사각형인 화강함으로 깔립니다. 각각의 화강함 판석들의 사이즈는 a x a 입니다.

최소로 필요한 화강함의 갯수는 몇 개일까? 극장 바닥보다 화강암을 더 크게 까는 것은 가능합니다, 하지만 최소 극장의 크기는 모두 채워야합니다. 화강암을 부수는 것은 금지이고 화강암의 옆면은 정사각형의 옆면과 평행해야합니다

 

Input

The input contains three positive integer numbers in the first line: n,  m and a (1 ≤  n, m, a ≤ 10^9).

Output

Write the needed number of flagstones.

 

인풋

첫줄에는 양수 3개가 들어가야 합니다. n, m and a (1 ≤ n, m, a ≤ 10^9)

아웃풋

필요한 화강암의 수를 출력하세요.


문제풀이

생각보다 생각을 꽤 하게 만드는 문제입니다.

처음에 규칙을 찾으려고 별에 별 짓을 다 하던 와중에

엄청 간단한 규칙을 찾았습니다.

 

일단 위에 예시대로 그림으로 그려보자면 

6 x 6의 크기를 가진 사각형에

4 x 4를 가진 판석으로 빈틈없이 채워야합니다.

 

1개만 넣으면 옆에 오른쪽이랑 아래가 2칸이 남습니다.

2칸 남은 오른쪽, 아래를 채우면 판석 3개를 사용하게 됩니다.

그럼에도 불구하고 아직도 빈틈이 있으니 적은 공간이지만 판석을 깔아줍니다.

총 4개 사용하였습니다.

 

이걸 코딩으로 옮기자면

1. 3개의 양수 입력받기

2. (n / a) * (m / a)을 출력해줍니다.

6 / 4 = 1.5

1.5 x 1.5 = 3 

이런식으로 계산하면 결과는 3이지만 저희가 필요한 판석의 개수는 4개입니다.

 

간단한 방법은 프로그래밍 언어에서 

소수를 다음 정수로 올려주는 기능을 쓰면 됩니다.

예를 들어 ceil(1.5) = 2 입니다.

#include <iostream>
#include <math.h>

int main(){
    double n, m, a;
    scanf("%lf %lf %lf", &n, &m, &a); // 3개의 정수 한 줄에 입력받기
    printf("%1.lf\n", ceil(n / a) * ceil(m / a)); // 계산 후 출력
    return 0;
}

출력할 때 "%1.lf\n" 여기에서 왜 그냥 lf가 아니라 왜 1.lf로 했을까요?

그 이유는 직접 출력해보시면 아시겠지만

그냥 lf로 하면 double 형이기 때문에 

4.000000 이런식으로 나옵니다. 하지만 저희가 원하는 값은 그게 아닙니다. 

그냥 정수입니다.

그렇기에 1.lf를 사용하시면 4로 출력됩니다.

 

'C++ > Codeforces' 카테고리의 다른 글

C++[118A] String Task 문제해석 및 풀이  (0) 2020.08.04
C++ [59A] Word 문제해석 및 풀이  (0) 2020.08.04