카테고리 없음
[백준] 3004 - 체스판 조각
비번변경
2025. 1. 22. 21:42
문제
문제 : https://www.acmicpc.net/problem/3004
상근이는 체스판을 톱으로 자르려고 한다. 체스판은 최대 N번 자를 수 있고, 변에 평행하게만 자를 수 있다. 또 자를 때는 체스판의 변의 한쪽 끝에서 다른 쪽 끝까지 잘라야 하며, 자른 후에는 조각을 이동시킬 수 없다.
이때 최대 몇 조각을 낼 수 있는지 구하여라.
풀이
체스판 조각이 최대가 되기 위해서는 가로와 세로를 번갈아가면서 잘라야 한다.
체스판 조각의 수는 가로 조각의 수와 세로 조각의 수를 곱한 값에 해당하며, 자를 때마다 조각은 1개씩 증가한다. 또한 가로 조각과 세로 조각이 모두 증가하기 위해서는 2번 잘라야 한다.
때문에 가로 조각은 N을 2로 나눈 몫에 1을 더한 값, 그리고 세로 조각은 N을 2로 나눈 몫에 나머지와 1을 더한 값이라고 할 수 있다. 참고로 0번 잘랐을 때 가로 조각도 한 개, 세로 조각도 한 개이기 때문에 각각 1을 더해주어야 한다.
import sys
# 입력 값
n = int(sys.stdin.readline())
# 몫, 나머지 계산
q, r = divmod(n, 2)
# 조각 수 계산
print((1 + q) * (1 + q + r))
참고 문서
https://www.acmicpc.net/problem/3004