728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에 빨간색 블럭의 수 R과 갈색 블럭의 B가 주어진다. (8 ≤ R ≤ 5000, 1 ≤ B ≤ 2,000,000)
출력
첫째 줄에 상근이네 방의 크기 L과 W을 공백으로 구분하여 출력한다. 만약, 두 수가 다르다면, 큰 수가 L이 되고 작은 수가 W이 된다. 항상 정답이 유일한 경우만 입력으로 주어진다.
소스코드
#include <iostream> using namespace std; int main(void) { int r, b, sum; int sw, sl, w, l; cin >> r >> b; for (l = 1;; l++) { if (b%l == 0) w = b / l; sum = w * 2 + l * 2 + 4; if (sum == r) { if (w > l) cout << w + 2 << ' ' << l + 2; else cout << l + 2 << ' ' << w + 2; break; } } }
Tip
빨간 블럭으로 갈색 블럭을 감싸기 위해선 갈색 블럭의 가로와 세로를 모두 덮어야 하므로 가로*2+세로*2가 필요하며 모서리를 채워야 하기 때문에 모서리 네 개를 더한 가로*2+세로*2+4라는 공식이 나온다. 이를 만족하는 조건들을 브루트 포스로 구한다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 5566 - 주사위 게임(JOI 2010 예선) (0) | 2018.08.05 |
---|---|
백준] 11728 - 배열 합치기 (0) | 2018.08.04 |
백준] 2003 - 수들의 합2 (0) | 2018.08.01 |
백준] 14697 - 방 배정하기(KOI 2017 전국 - 초등부, 중등부) (0) | 2018.07.29 |
백준] 1018 - 체스판 다시 칠하기 (0) | 2018.07.28 |