<답안>
#include <iostream>
using namespace std;
int main()
{
int t;
int hight, width, n;
int h, w;
int temp;
int term;
int result;
cin>>t;
for(int i=0; i<t; i++)
{
cin>>hight>>width>>n;
h = hight;
w = n / hight;
temp = h * w;
term = n - temp;
if(term == 0)
{
result = h*100 + w;
}
else
{
w++;
h = term;
result = h*100 + w;
}
cout<<result<<"\n";
}
return 0;
}
<설명>
x축, y축을 넣어 생각을 하면, x=1부터 y=1~y=h까지 직사각형 채우고, 그다음 x=2이고 y=1~y=h까지 채우고
그런식으로 채우다가 마지막 채워진 위치 x,y를 구하는 느낌이다
그럴려면, 마지막에 채워지는 x전까지 채워진 직사각형의 가로 x를 먼저 알아야
그다음 x좌표에서 남은칸만큼 y값이 되는 식이다
이전 x값인 w를 구하기위한 식으로는
w * 높이 hight <= n 일때 최대 w 값이다 정리하자면 w <= n / hight 인 값이다
프로그래밍 상으론 w = n / hight로 구한다
그러면 채워진 직사각형은 w * hight로 구할수 있고, 남은 칸 term 은 n - (w*hight) 인 셈이다
이때, 두가지의 경우가 생긴다
만약 term이 0인 경우, 즉 입력된 n값이 직사각형의 마지막층인 경우
-> 앞에서 구해진 w와 hight가 n번째 위치이므로 그대로 w*100 + hight로 구하면 된다
0이 아닌경우
-> w는 +1을 해야 하고, term 만큼 h가 된다
그렇게 w*100 + hight로 구할 수 있다
'백준 > 백준 단계별 문제풀이' 카테고리의 다른 글
백준 1011번 (C++) (0) | 2020.08.28 |
---|---|
백준 2775번 (C++) (0) | 2020.08.27 |
백준 2869번 (C++) (0) | 2020.08.25 |
백준 1193번 (C++) (0) | 2020.08.23 |
백준 2292번 (C++) (0) | 2020.08.23 |