Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 구현하는 체스판에서 변의 길이가 홀수인 정사각형 개수 구하기

한 변의 길이를 나타내는 숫자 size가 입력으로 주어집니다. 목표는 size × size 크기의 체스판 내부에서 만들 수 있는 정사각형 중, 변의 길이가 홀수인 것들의 개수를 구하는 것입니다.

예제로 이해하기

입력

size=3

출력

체스판에서 변의 길이가 홀수인 정사각형의 개수: 10

설명

아래 그림과 같이 모든 정사각형이 표시되며, 여기에는 판 전체를 덮는 3×3 크기의 정사각형 1개도 포함됩니다.

C++로 구현하는 체스판에서 변의 길이가 홀수인 정사각형 개수 구하기

입력

size=4

출력

체스판에서 변의 길이가 홀수인 정사각형의 개수: 20

설명

1×1 크기의 정사각형이 총 16개 있고, 그 안에 3×3 크기의 정사각형이 4개 들어 있습니다. 따라서 16 + 4 = 20개가 됩니다.

접근 방법

이 문제는 변의 길이를 1부터 size까지 순회하면서, 각 홀수 길이마다 해당 길이의 정사각형이 몇 개 존재하는지 세는 방식으로 해결할 수 있습니다.

핵심 아이디어는 다음과 같습니다. 한 변의 길이가 i인 정사각형은 size × size 격자 안에서 가로 방향으로 (size − i + 1)개, 세로 방향으로 (size − i + 1)개의 위치에 놓일 수 있습니다. 따라서 길이 i인 정사각형의 개수는 (size − i + 1)²개이며, i가 홀수일 때만 이 값을 누적하면 됩니다.

  • 체스판 한 변의 길이를 나타내는 정수 size를 입력받습니다.

  • 함수 square_odd_length(int size)는 size를 받아 변의 길이가 홀수인 정사각형의 개수를 반환합니다.

  • count 변수를 0으로 초기화합니다.

  • i를 1부터 size까지 2씩 증가시키며 순회하여 홀수 값만 확인합니다.

  • 각 i에 대해 temp = size − i + 1을 계산합니다.

  • temp × temp 값을 count에 더합니다.

  • 반복문이 끝나면 count를 결과로 반환합니다.

구현 예제

#include <bits/stdc++.h>
using namespace std;
int square_odd_length(int size){
   int count = 0;
   for (int i = 1; i <= size; i = i + 2){
      int temp = size - i + 1;
      count = count + (temp * temp);
   }
   return count;
}
int main(){
   int size = 6;
   cout<<"체스판에서 변의 길이가 홀수인 정사각형의 개수: "<<square_odd_length(size);
   return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

체스판에서 변의 길이가 홀수인 정사각형의 개수: 56

동작 원리 검증

size = 6인 경우를 살펴보면 다음과 같습니다.

  • i = 1 → temp = 6 → 6² = 36개
  • i = 3 → temp = 4 → 4² = 16개
  • i = 5 → temp = 2 → 2² = 4개

36 + 16 + 4 = 56으로, 실행 결과와 일치합니다. 이 알고리즘은 반복문이 size/2번만 돌기 때문에 시간 복잡도는 O(n)으로 매우 효율적입니다.