출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
https://www.acmicpc.net/problem/2858
#include <iostream>
using namespace std;
int R, B;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> R >> B;
for (int i = 1; i * i <= B; i++)
{
if (B % i == 0)
{
int y = i;
int x = B / i;
if ((x * 2 + y * 2 + 4) == R)
{
if (x >= y)
cout << x + 2 << " " << y + 2;
else
cout << y + 2 << " " << x + 2;
return 0;
}
}
}
}
요즘 코딩 테스트에서 많이 나오는 부류는 brute force, dfs, bfs, 시뮬레이션, 구현 정도라고 한다. (물론 나도 그냥 들은거라 정확하지 않다.) 이 분야들을 조금 더 집중해서(?) 풀어봐야겠다.
이 문제를 풀면서 가장 중요했던 것은 내부에 위치하는 brownTile들을 몇개의 세로줄로 자를 것이냐였다. 높이를 하나씩 늘리면서 경우에 맞을 경우 출력하도록 했다.
출력을 하는 조건에는 brownTile, 즉 사각형 내부의 작은 사각형의 가로의 길이, 세로의 길이를 정하는 것이 가장 중요했다. 가로 * 2 + 세로 * 2 + 4(가장자리) 의 값이 redTile의 개수와 같다면 그게 정답이다. 구현력이 부족해서 코드를 작성하는데 애를 좀 많이 먹었다. 도대체 언제쯤 실력이 늘려나 고민이다.
백준 7568 덩치(brute force) (0) | 2020.07.16 |
---|---|
백준 4641 Doubles(brute force) (0) | 2020.07.16 |
백준 2217 로프(greedy approach) (0) | 2020.07.14 |
백준 10164 격자상의 경로(dynamic programming) (0) | 2020.07.13 |
백준 2011 암호코드(dynamic programming) (0) | 2020.07.11 |
댓글 영역