C_C++

C++ - 백준 3004 체스판 조각

ncode 2025. 1. 30. 12:47
728x90
반응형
/* 백준 3004 체스판 조각

* 문제

상근이는 3003번에서 동혁이가 발견한 체스판을 톱으로 자르려고 한다.
상근이는 체스판을 최대 N번 자를 수 있으며, 변에 평행하게만 자를 수 있다. 또, 자를 때는
체스판의 그 변의 한쪽 끝에서 다른쪽 끝까지 잘라야 한다. 자른 후에는 조각을 이동할 수 없다.
이때, 최대 몇 조각을 낼 수 있는지 구하는 프로그램을 작성하시오.

* 입력

첫째 줄에 N이 주어진다. (1 ≤ N ≤ 100)

* 출력

첫째 줄에 상근이가 얻을 수 있는 조각의 최댓값을 출력한다.

* 예제 입력 1

1

* 예제 출력 1

2

* 예제 입력 2

3

* 예제 출력 2

6

*/

/* 풀이

    패턴을 찾아보면 다음과 같다.

    N   조각수   패턴       차이
    -----------------------------
    1   2       
    2   4       2 -> 4      +2
    3   6       4 -> 6      +2
    4   9       6 -> 9      +3
    5   12      9 -> 12     +3
    6   16      12 -> 16    +4
    7   20      16 -> 20    +4
    8   25      20 -> 25    +5
    ...
*/

#include <iostream>

using std::cin, std::cout;

// n 번째 값을 계산하는 함수
int calc_pieces(int n) {
	if (n < 1) return 0;

	int result = 2;
	if (n == 1) return result;

	int step = 2;
	for (int i = 2; i <= n; i++) {
		result += step;
		if (i % 2 == 1) {
			step++;
		}
	}
	return result;
}

int main() {
	int n;
    cin >> n;

	cout << calc_pieces(n) << '\n';
}
728x90
반응형