[백준/29648번] Разрезание заготовки - B3/Python
https://www.acmicpc.net/problem/29648
문제
위대한 화가의 어린 조수 올리는 항상 그의 그림자 속에 있는 것이 지겨워졌고, 화가가 낮잠을 자는 틈을 타서 그녀만의 걸작을 그리기로 결심했습니다. 이를 위해 그녀는 작업실에 가득 차 있는 정사각형 캔버스를 하나 꺼냈습니다. 하지만 그 캔버스는 너무 커 보였고, 그녀의 위치에 맞지 않게 너무 큰 크기였습니다. 그래서 올리는 오른쪽에서 폭이 인 부분을 잘라내기 위해 세로로 자르기로 했습니다.
이제 그녀는 캔버스가 너무 높다고 생각하여 위쪽에서 높이가 인 부분을 잘라내기 위해 가로로 자르기로 했습니다. 그렇게 얻어진 캔버스가 그녀의 작업에 적합한지 확인하기 위해, 그녀는 그 면적 를 계산하여 종이에 적어 놓았습니다.
몇 시간 동안 작업한 후, 올리는 자신의 작품이 완성되었고 대중의 주목을 받을 만하다고 생각하여 도시 중심의 축제로 가져갔습니다.
잠에서 깨어난 위대한 화가는 모든 것을 즉시 알아차렸습니다. 이런 경우를 많이 겪어본 경험이 있었기 때문입니다. 캔버스의 재고를 복구하기 위해, 그는 이제 올리가 사용한 것과 정확히 같은 정사각형 캔버스를 새로 사야 했습니다. 화가가 원래 캔버스의 크기에 대해 알 수 있었던 유일한 정보는 작업실에서 발견된 종이에 적혀 있던 a, b, S라는 숫자들뿐이었습니다.
상황을 복잡하게 만드는 것은 판매되는 캔버스의 한 변의 길이가 정수로만 표현된다는 점입니다. 주어진 a, b, S를 바탕으로 새로운 캔버스를 사러 갈 필요가 있는지, 그리고 캔버스의 한 변의 길이가 얼마인지를 찾는 프로그램을 작성하세요.
입력
입력 파일의 유일한 줄에는 세 개의 정수 , 및 가 포함되어 있습니다 , (, ).
풀이
a, b, s = map(int, input().split())
current, i = 0, max(a, b) + 1
while current < s:
current = (i - a) * (i - b)
i += 1
if current == s:
print(i - 1)
else:
print(-1)
해결방법
원래 캔버스의 길이를 1씩 증가시키면서 같은 경우 $L$을 출력하고 커진 경우에는 -1을 출력하면 되는 문제.