C/C++ 프로그래밍 언어에서 중괄호({})를 사용하지 않고 2차원 행렬을 출력하는 코드를 살펴보겠습니다.
중괄호는 프로그래밍 언어에서 구분자 역할을 하는 기호로, 프로그램 내에서 독립적인 코드 블록을 정의하는 데 사용됩니다. C/C++에서는 중괄호 없이 스코프(범위)를 정의하기 어렵기 때문에, 이번에 소개할 기법은 꽤 흥미로운 주제입니다.
먼저 2차원 행렬을 출력하는 기본 코드와 실행 결과부터 확인해 보겠습니다.
기본 예제
#include <iostream>
using namespace std;
int main() {
int arr[2][2] = {{12, 67},
{99, 5}};
int n = 2, m = 2;
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
cout<<arr[i][j]<<" ";
}
cout << endl;
}
return 0;
}출력 결과
12 67 99 5
그렇다면 같은 결과를 중괄호 없이 출력하려면 어떻게 해야 할까요? 각 반복 단계에서 마지막 열이 아닐 때는 공백을, 마지막 열일 때는 줄바꿈을 출력해야 합니다. 이를 위해 다음과 같은 축약 표현을 사용할 수 있습니다.
" \n"[j==n-1]
이 표현식의 동작 원리는 다음과 같습니다. 문자열 리터럴 " \n"은 공백 문자와 줄바꿈 문자, 두 개의 문자로 이루어진 배열입니다. 인덱스 자리에 있는 조건식 j==n-1이 참이면 값이 1이 되어 '\n' 문자에 접근하고, 거짓이면 값이 0이 되어 공백 문자 ' '에 접근합니다. 즉, 조건에 따라 공백 또는 줄바꿈을 선택적으로 출력하는 것입니다.
예를 들어 2×2 행렬을 이 방식으로 출력하면, 첫 번째 요소 뒤에는 공백이 출력되고 두 번째(마지막) 요소 뒤에는 줄바꿈이 발생합니다.
다음은 이 기법을 실제로 구현한 프로그램입니다.
구현 예제
#include<iostream>
using namespace std;
int main() {
int mat[][3] = {
{31, 7, 57},
{42, 1, 99},
{12, 9, 56}
};
int n=3, m=3;
cout<<"The matrix is : \n";
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cout<<mat[i][j]<<" \n"[j==n-1];
return 0;
}출력 결과
The matrix is : 31 7 57 42 1 99 12 9 56