IT 프로그래밍/C++

[c++] 2903번 중앙 이동 알고리즘

기술1 2024. 5. 25. 16:00

문제

https://www.acmicpc.net/problem/2903

 

코드

#include <iostream>
#include <cmath>
using namespace std;
int n;

int main()
{
	cin >> n;
	int dot = 2;

	while (n--)
	{
		dot = dot * 2 - 1;
	}

	cout << static_cast<long long>(pow(dot, 2)) << endl;

	return 0;
}

 

설명 

주어진 도형을 잘 보면 2 * 점의 개수 -1 순으로 증가를 하는 것을 볼 수 있습니다.

 

이것을 바탕으로 while문을 걸어준 다음 pow(dot, 2)) 혹은 dot * dot를 출력해주시면 답은 나옵니다. 간단한 문제라 점의 개수가 어떻게 증가하는지 여부만 파악한다면 쉽게 풀 수 있는 문제였습니다.

 

예제 실행 흐름
만약 n = 3을 입력받으면:
1. 초기 dot = 2.
2. 첫 번째 반복 (n = 2): dot = 2 * 2 - 1 = 3.
3. 두 번째 반복 (n = 1): dot = 3 * 2 - 1 = 5.
4. 세 번째 반복 (n = 0): dot = 5 * 2 - 1 = 9.
5. 최종적으로 dot = 9.
6. pow(dot, 2) = pow(9, 2) = 81.
7. 출력: 81.