Company
교육 철학

LV07 2차원 배열, 나머지 연산자, 카운팅

C++ 프로그래밍: 반복문 심화와 응용

이번 장에서는 C++ 프로그래밍의 핵심 개념인 반복문을 한 단계 더 깊이 있게 배워봅니다. 반복문 안에 또 다른 반복문을 사용하는 이중 반복문의 구조를 이해하고, 이를 활용하여 구구단이나 2차원 배열과 같은 격자 형태의 데이터를 다루는 방법을 익힙니다. 또한, **나머지 연산자(%)**를 활용하여 숫자의 특성을 파악하고 조건에 맞는 데이터를 처리하는 실용적인 예제를 다룹니다.

1. 이중 반복문 (Nested Loops)

단순한 작업의 반복을 넘어, 복잡하고 다차원적인 작업을 수행해야 할 때 이중 반복문이 사용됩니다. 이중 반복문은 바깥쪽 반복문이 한 번 실행될 때, 안쪽 반복문은 처음부터 끝까지 모두 실행되는 구조를 가집니다.
시계의 분침과 초침을 생각하면 쉽습니다. 분침(바깥쪽 반복문)이 한 칸 움직일 때마다, 초침(안쪽 반복문)은 60번을 모두 돌아야 합니다.
기본 구조:
#include <iostream> int main() { // 바깥쪽 for문: j는 0, 1, 2 총 3번 반복합니다. for (int j = 0; j < 3; j++) { // 안쪽 for문: k는 0, 1, 2 총 3번 반복합니다. for (int k = 0; k < 3; k++) { // 이 구문은 바깥쪽 반복 1번에 대해 안쪽 반복 3번씩, 총 3 * 3 = 9번 실행됩니다. std::cout << "j: " << j << ", k: " << k << std::endl; } std::cout << "--- 바깥쪽 루프 1회 종료 ---" << std::endl; } return 0; }
C++
복사

응용 1: 구구단 출력하기

이중 반복문의 가장 대표적인 활용 예제는 구구단입니다.
바깥쪽 반복문 (i): 2단부터 9단까지, 단(Dan)을 결정합니다.
안쪽 반복문 (j): 각 단에 곱해지는 수(1부터 9까지)를 결정합니다.
#include <iostream>int main() { // 2단부터 9단까지 반복 for (int i = 2; i < 10; i++) { // 새로운 단을 시작하기 전에 제목을 출력하고 한 줄 띄웁니다. std::cout << "\n--- " << i << "단 ---" << std::endl; // 각 단에 1부터 9까지 곱하기 for (int j = 1; j < 10; j++) { // "i * j = (결과)" 형식으로 출력합니다. std::cout << i << " * " << j << " = " << i * j << std::endl; } } return 0; }
C++
복사

2. 2차원 배열과 이중 반복문

2차원 배열은 행(row)과 열(column)으로 구성된, 마치 엑셀 시트나 표와 같은 형태의 데이터를 저장하는 구조입니다. 이러한 2차원 배열의 모든 요소에 접근하고 값을 처리할 때 이중 반복문이 매우 유용하게 사용됩니다.

2.1. 2차원 배열 선언과 접근

2차원 배열은 대괄호 []를 두 번 사용하여 타입 이름[세로크기][가로크기] 형태로 선언합니다. 수학의 행렬처럼 [y][x] 좌표로 생각하면 다루기 편리합니다.
#include <iostream>int main() { // int형 2차원 배열 선언 (세로 2, 가로 4) int arr[2][4] = { {1, 2, 3, 4}, // 첫 번째 행 (y=0) {5, 6, 7, 8} // 두 번째 행 (y=1) }; // 주석으로 인덱스를 표현하면 다음과 같습니다. // int arr[y][x] = { // {[0][0], [0][1], [0][2], [0][3]}, // {[1][0], [1][1], [1][2], [1][3]} // } // 특정 요소에 접근하기 int y = 1; int x = 2; int num = arr[y][x]; // arr[1][2]의 값인 7을 변수 num에 저장 std::cout << "arr[" << y << "][" << x << "]의 값은 " << num << "입니다." << std::endl; // 출력: 7 return 0; }
C++
복사

2.2. 이중 반복문으로 2차원 배열 다루기

이중 반복문을 사용하면 2차원 배열의 모든 요소를 순차적으로 방문하여 값을 읽거나 변경할 수 있습니다.
바깥쪽 반복문: 세로(행, y)를 제어합니다.
안쪽 반복문: 가로(열, x)를 제어합니다.
#include <iostream> int main() { int arr[2][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 } }; // 이중 for문을 사용하여 배열의 모든 값을 1증가 for (int y = 0; y < 2; y++) // 세로 크기만큼 반복 (0, 1) { for (int x = 0; x < 5; x++) // 가로 크기만큼 반복 (0, 1, 2, 3, 4) { arr[y][x] += 1; } } // 변경된 값을 확인하기 위해 다시 출력 for (int y = 0; y < 2; y++) { for (int x = 0; x < 5; x++) { std::cout << arr[y][x] << " "; } std::cout << std::endl; // 한 행 출력이 끝나면 줄바꿈 } return 0; }
C++
복사

3. 나머지 연산자(%)를 사용한 조건 판별

% 연산자는 나눗셈의 나머지를 구하는 연산자입니다. 이를 if 조건문과 함께 사용하면 숫자가 홀수인지, 짝수인지, 또는 특정 수의 배수인지 쉽게 구분할 수 있습니다.
num % 2 == 0 : 2로 나눈 나머지가 0인가? → 짝수 판별
num % 2 == 1 : 2로 나눈 나머지가 1인가? → 홀수 판별
num % 3 == 0 : 3로 나눈 나머지가 0인가? → 3의 배수 판별
#include <iostream>int main() { int num = 101; std::cout << "숫자 " << num << "은(는) " << std::endl; if ((num % 2) == 0) { std::cout << " - 짝수입니다." << std::endl; } else { std::cout << " - 홀수입니다." << std::endl; } if ((num % 3) == 0) { std::cout << " - 3의 배수입니다." << std::endl; } else { std::cout << " - 3의 배수가 아닙니다." << std::endl; } return 0; }
C++
복사

4. 종합 응용: 배열 내 조건에 맞는 데이터 개수 세기 (카운팅)

지금까지 배운 반복문, 배열, 조건문을 모두 활용하여 실용적인 문제를 해결해 봅시다. 배열에 들어있는 수많은 데이터 중에서 특정 조건(예: 홀수)을 만족하는 요소가 총 몇 개인지 세어보겠습니다.
이러한 '카운팅' 기법은 데이터 분석의 가장 기초적인 단계입니다.
1.
개수를 셀 변수(count)를 0으로 초기화합니다.
2.
반복문을 통해 배열의 모든 요소를 하나씩 확인합니다.
3.
if 조건문을 사용하여 현재 요소가 원하는 조건에 맞는지 검사합니다.
4.
조건이 참이면 count 변수를 1 증가시킵니다.
5.
반복문이 끝나면 count 변수에는 조건에 맞는 요소의 총개수가 저장됩니다.
#include <iostream> int main() { int arr[5] = { 1, 2, 3, 4, 5 }; // 홀수의 개수를 저장할 변수를 선언하고 0으로 초기화합니다. int count = 0; // for문을 이용해 arr 배열의 모든 요소를 순회합니다. for (int i = 0; i < 5; i++) { // arr[i] 의 값이 홀수인지 판별합니다. if ((arr[i] % 2) == 1) { // 홀수가 맞다면 count를 1 증가시킵니다. count++; } } // 최종 결과를 출력합니다. std::cout << "배열 {1, 2, 3, 4, 5}에 포함된 홀수의 개수는 " << count << "개 입니다." << std::endl; return 0; }
C++
복사

“강의는 많은데, 왜 나는 아직도 코드를 못 짤까?”

혼자 공부하다 보면 누구나 이런 고민을 하게 됩니다.
강의는 다 들었지만 막상 손이 안 움직이고,
복습을 하려 해도 무엇을 다시 봐야 할지 모르겠고,
질문할 곳도 없고,
유튜브는 결국 정답을 따라 치는 것밖에 안 되는 것 같고.
문제는 ‘연습’이 빠졌기 때문입니다.
단순히 강의를 듣는 것만으로는 실력이 늘지 않습니다.
실제 문제를 풀고, 고민하고, 직접 구현해보는 시간이 반드시 필요합니다.

그래서, 얌얌코딩 코칭은 다릅니다.

그냥 가르치지 않습니다.
스스로 설계하고, 코딩할 수 있게 만듭니다.
얌얌코딩 코칭에서는 단순한 예제가 아닌,
스스로 문제를 분석하고 구현해야 하는 연습문제를 제공합니다.
이 연습문제들은 다음과 같은 역량을 키우기 위해 설계되어 있습니다:
문제를 스스로 쪼개고 설계하는 힘
다양한 조건을 만족시키는 실제 구현 능력
기능 단위가 아닌, 프로그램 단위로 사고하는 습관
마침내 자신의 힘으로 코드를 끝까지 작성하는 경험

지금 필요한 건 더 많은 강의가 아닙니다.

코드를 스스로 완성해 나가는 훈련,
그것이 지금 실력을 끌어올릴 가장 현실적인 방법입니다.
자세한 안내 보기: 프리미엄 코칭 안내 바로가기
또는 카카오톡 상담방: 얌얌코딩 상담방