라틴 스퀘어는 특별한 패턴을 가진 행렬입니다. 패턴을 살펴보기 위해 다양한 예를 살펴보겠습니다.
1 2 2 1 1 2 3 3 1 2 2 3 1 1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1
위의 예에서 알 수 있듯이 라틴 사각형은 크기가 다릅니다. 그러나 위의 행렬의 패턴을 주의 깊게 관찰하면 이전 행의 마지막 숫자가 다음 행의 첫 번째 요소로 오는 것을 알 수 있습니다.
라틴 광장에 숨겨진 패턴입니다. 입력 n에 대해 위의 행렬을 생성하는 프로그램을 작성해야 합니다.
알고리즘
- n은 원하는 숫자로 초기화합니다.
- n + 1 값으로 숫자를 초기화하고 이를 first_half_end라고 합니다.
- 1에서 n까지 반복하는 루프를 작성하십시오.
- first_half_end의 값을 first_half_start라는 변수에 할당합니다.
- first_half_start가 값 n에 도달할 때까지 루프를 작성합니다.
- 반복 변수, 즉 first_half_start를 인쇄합니다.
- 1에서 first_half_end까지 반복하는 루프를 작성합니다.
- 반복 변수를 인쇄합니다.
- first_half_end의 값을 1만큼 감소시킵니다.
- 다음 행으로 이동합니다.
구현
다음은 위의 알고리즘을 C++로 구현한 것입니다.
#include <bits/stdc++.h> using namespace std; void generateLatinSquare(int n) { int first_half_end = n + 1; for (int i = 1; i <= n; i++) { int first_half_start = first_half_end; while (first_half_start <= n) { cout << first_half_start << " "; first_half_start++; } for (int second_half_start = 1; second_half_start < first_half_end; second_half_start++){ cout << second_half_start << " "; } first_half_end--; cout << endl; } cout << endl; } int main(void) { generateLatinSquare(2); generateLatinSquare(3); generateLatinSquare(4); return 0; }
출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
1 2 2 1 1 2 3 3 1 2 2 3 1 1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1