#문제
https://www.acmicpc.net/problem/2858
2858번: 기숙사 바닥
문제 상근이는 기숙사 생활을 한다. 상근이의 방의 크기는 L*W 이다. 수업시간에 타일 채우기 경우의 수를 계산하던 상근이는 자신의 방도 1*1크기 타일로 채우려고 한다. 이때, 가장자리는 빨간��
www.acmicpc.net
#풀이
문제를 읽고 문제에서 주어진 조건들을 수식으로 표현해서 적고 살펴보는 것이 중요하다. 그리고 주어진 수식들을 조합하여 얻을 수 있는 식들을 먼저 정리한다. 그리고 코드를 어떻게 구성할지 생각해본다. 이 문제의 경우, 두 가지 수식 WL-(W-2)(L-2)=R, (W-2)(L-2)=B을 통해 WL=B+R, W+L=2+R/2를 얻을 수 있었다.
정답이 유일한 경우만 주어진다고 했으므로 반복문을 통해 하나씩 살펴보며 정답인지 체크해보면 된다. 이 문제의 핵심은 R, B의 관점뿐만 아니라 L, W의 관점으로도 문제를 바라볼 수 있어야 한다는 점이다.
#소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include<iostream>
using namespace std;
int main(void)
{
int L, W;
int R, B;
cin >> R >> B;
int sum = B + R;//sum은 총 타일의 수
int i, j;
/*방정식을 풀면i+j가 2+R/2이고 R이 최대 5000이기 때문에
i+j는 최대 2502이다. 그리고 i,j가 3보다 작으면 갈색타일이 0이되므로
i,j는 반드시 3이상의 정수이다.
*/
for (i = 3; i < 2500; i++) {
//i는 W 또는 L
j = (2 + R / 2) - i;
//j는 L 또는 W
if (i*j == sum)//정답일때
break;
}
if (i > j) {
L = i, W = j;
}
else {
L = j, W = i;
}
cout << L << ' ' << W;
return 0;
}
|
cs |
'Algorithm > Brute-force' 카테고리의 다른 글
[C++] 백준 1065번 : 한수 (S4) (0) | 2020.07.15 |
---|---|
[C++] 백준 7568번 : 덩치 (S5) (0) | 2020.07.15 |
[C++] 백준 1436번 : 영화감독 숌 (S5) (0) | 2020.07.15 |
[C++] 백준 1018번 : 체스판 다시 칠하기 (S5) (0) | 2020.07.15 |
[C++] 백준 2231번 : 분해합 (B2) (0) | 2020.07.15 |