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
반응형