출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

상세 컨텐츠

본문 제목

백준 2858 기숙사 바닥(brute force)

알고리즘

by 장동균 2020. 7. 16. 22:39

본문

https://www.acmicpc.net/problem/2858

 

2858번: 기숙사 바닥

문제 상근이는 기숙사 생활을 한다. 상근이의 방의 크기는 L*W 이다. 수업시간에 타일 채우기 경우의 수를 계산하던 상근이는 자신의 방도 1*1크기 타일로 채우려고 한다. 이때, 가장자리는 빨간��

www.acmicpc.net

#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의 개수와 같다면 그게 정답이다. 구현력이 부족해서 코드를 작성하는데 애를 좀 많이 먹었다. 도대체 언제쯤 실력이 늘려나 고민이다.

관련글 더보기

댓글 영역