본문 바로가기

코딩테스트

백준 2903번 중앙 이동 알고리즘

728x90

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

규칙에 따라 점의 개수를 구해야 하는 문제 였는데
1. 정사각형의 각 변의 중아엥 점을 하나 추가
2. 정사각형의 중심에 점을 하나 추가
문제에 흰점과 검은 점이 섞여있어서 어렵게 느껴졌었는데, 색 구분 없이 보게 되면 완전하게 점으로 채워진 정사각형이 보이게 된다. 이를 통해서 변의 길이만 알게 되면 점의 개수를 구할 수 있다 판단하였다.

처음 변의 길이가 2 였고, 다음은 3, 5로 증가한다. 다음은 점 5개 사이에 점이 1개씩 추가되므로, 변의 길이는 9가 되어진다. 여기서 알 수 있듯이 (이전 변의 길이 -1) 만큼씩 변의 길이가 늘어나고 있는 것이다.

초기 2
1회 2 + 1 = 3
2회 3 + 2 = 5
3회 5 + 4 = 9
4회 9 + 8 = 17
5회 17 + 16 = 33


여기서 늘어나는 길이를 나열하여 직관적인 규칙을 찾았고 이는 2의 배수만큼 늘어나며, n회 차의 변의 길이는 (1+2**n)이라는 것이었다.
이에 맞춰서 코드를 작성하였다.

n = int(input())
a = (1 + 2**n)
print(a**2)

 

 

728x90