본문 바로가기

코딩테스트/BOJ

[백준/파이썬] 2858번: 기숙사 바닥 (Python)

문제

www.acmicpc.net/problem/2858

 

2858번: 기숙사 바닥

첫째 줄에 상근이네 방의 크기 L과 W을 공백으로 구분하여 출력한다. 만약, 두 수가 다르다면, 큰 수가 L이 되고 작은 수가 W이 된다. 항상 정답이 유일한 경우만 입력으로 주어진다.

www.acmicpc.net

 

풀이

 

 - 브루트 포스, 완전탐색

 

 - 공식 도출을 해야 한다

빨간색 타일의 수(R)은 8이상이고, 갈색 타일의 수(B)는 1이상이기 때문에, 방의 크기는 최소 3*3이다.

 

방의 크기가 3*3일 경우에, 빨간색 타일의 수(R)는 R = (3*2) + (3-2)*2 가 된다

 

 

방의 크기가 3*3일 경우에, 갈색의 타일의 수(B)는 B = (3-2)*(3-2)이다

 

방의 크기가 4*3일 경우에 빨간색과 갈색 타일의 수는 다음과 같이 된다.

따라서 빨간색 타일의 개수는 i*2 + (j-2)*2 , 갈색 타일의 개수는 (i-2)*(j-2)가 된다.

 

코드

r, b = map(int, input().split())

l, w = 0, 0
for i in range(3,3000):
    for j in range(3,3000):
        if i*2 + (j-2)*2 == r and (i-2)*(j-2) == b:
            l , w = i, j
            break
    if l != 0:
        break

if w > l:
    l, w = w, l
    
print(l, w)