[#3] 반복문(++, for)과 초보 프로그래머의 첫번째 벽, 별쌓기 게임 만들기

이번 시간에는 코딩에서 굉장히 중요한 부분인 반복문에 대해 알아보고, 이전에 공부했던 내용들과 함께 응용해서 최종적으로는 별(피라미드)쌓기 게임을 만들어 볼 겁니다.

 

이 피라미드 쌓기 게임은 코딩을 공부하는 초심자들이 맞닥뜨리는 첫번째 통곡의 벽이라고도 불리는 아주 유명한 게임이기도 하죠.

입문레벨에 속하는 응용풀이면서도 많은 코딩 입문자들을 좌절시키는 난이도를 가지고 있거든요.

 

그래도 여기서 포기하지 않고 별쌓기를 성공하고 그 쌓는 과정과 원리에 대해 '이해'까지 했다면, 본격적으로 개발자로 향하는 문이 열린다고 하니 모두 포기하지 말고 성공해봅시다.

 


 

++


코딩을 하다 보면 어떤 숫자나 문자 등을 반복해서 출력해야 하는 상황이 옵니다.
또, 지금까지 배운 내용으로 보면, 뭔가를 출력하려면 printf()를 써야 하죠.

예제를 하나 들어보겠습니다.  "반갑습니다"를 5번 출력하려면 어떻게 해야 될까요?
여태 배운 지식을 활용해서 작성하면 아마 이렇게 될 겁니다.

printf("반갑습니다.\n");
printf("반갑습니다.\n");
printf("반갑습니다.\n");
printf("반갑습니다.\n");
printf("반갑습니다.\n");

 

이렇게 printf()를 5번 쓰면 5번 출력은 됩니다.
하지만… 이건 사람이 일일이 복사해서 붙여넣어야 하죠. 귀찮기도 하고, 실수나 버그도 생기기 쉽습니다.

게다가 이걸 5번이 아닌 천 번, 만 번 출력해야 한다면? 생각만 해도 아찔하죠?
똑같은 내용의 printf()를 천 줄, 만 줄을 반복해서 써야 할테니까요.

이 때 등장하는 개념이 바로 반복문입니다.
반복문은 말 그대로 동일한 동작을 여러 번 반복하도록 도와주는 코드입니다.
반복문에서는 for문을 먼저 배우게 될 텐데, for문을 알기 전에 이 ++이란 녀석을 알고가는게 좋습니다.

위의 내용을 지우고 다시 아래의 코드를 입력해 봅시다.

int a = 10;
printf("a는 %d\n", a);
a++;
printf("a는 %d\n", a);

a라는 변수에 정수값 10을 넣고 printf로 "a는 (변수값)"을 출력하도록 했습니다.

int a = 10; 바로 아래 있는 곳에는 당연히 변수a의 값인 10이 출력되겠죠.

 

근데 밑으로 한칸 더 내려가보면 a++이란 녀석이 보입니다.

그리고 또 다시 아래에 printf "a는 (변수값)"출력이 하나 더 있죠.

 

감이 좋으신 분들은 눈치채셨을 겁니다. 저 ++이란 녀석은 숫자를 1씩 증가시킬 때 쓰는 기호입니다.

for같은 반복문에서는 같은 동작을 여러 번 할 수 있도록 도와주기도 하죠.

 

그러니 저걸 그대로 출력하면

이런 결과가 나오는 것을 볼 수 있습니다. 10인 a값에 a++로 1을 증가시켜줬으니 아래는 11이 나오는 거죠.

 

조금 더 알아봅시다.

이번에는 (변수)++이 아닌 ++(변수)도 한 번 알아보겠습니다.

++가 뒤에 오는게 아닌 먼저 앞에 오는 방식인거죠.

 

먼저 아래의 코드를 한번 작성해 보고 실행해봅시다.

int a = 10;
printf("a는 %d\n", ++a);
printf("a는 %d\n", a++);
printf("a는 %d\n", a);

a는 11

a는 11

a는 12

 

아마 이런 결과가 나오게 될 겁니다.

왜 첫번째와 두번째는 같은 11, 세번째는 12가 나오게 됐을까요?


이 차이를 이해하려면, ++가 변수 앞에 붙느냐 뒤에 붙느냐의 차이를 알아야 합니다.

앞에 붙는 ++a는 '전위 증가 연산자'라고 부릅니다.
++a는 먼저 a를 1 증가시키고, 그 다음에 그 값을 사용하게 되기 때문에, 바로 해당 줄의 숫자가 1 증가한 11로 표시 된 것이죠.

즉, 위의 코드에서:

int a = 10;
printf("a는 %d\n", ++a);  // 먼저 a가 11이 되고, 그 11이 출력됩니다.

라고 명령을 내리는 거죠.

반면에, 뒤에 붙는 a++은 '후위 증가 연산자'라고 불립니다.
a++는 먼저 a의 현재 값을 사용한 뒤, 그 다음에 1을 증가시키게 되죠.

 

즉, 위의 코드에서:

printf("a는 %d\n", a++);  // 이 줄에서는 a가 11이지만, 11이 먼저 출력된 뒤 a는 12가 됩니다.

라고 명령을 내리는 겁니다. 즉, a++는 출력될 때는 11이고, 출력 이후에는 12가 되는 원리죠.

세 번째 줄에서 이제 a는 12가 되었으니, 그대로 12가 출력된거고요.

이를 표로 요약하자면 아래와 같습니다.

++a 먼저 증가, 나중에 사용 a = a + 1 → 사용 증가된 값 사용
a++ 먼저 사용, 나중에 증가 사용 → a = a + 1 기존 값 사용 후 증가
이래도 이해가 안되는 분들을 위해 진짜 진짜 쉽게 표현해보자면
 

++a는 “미리 준비하고 등장하는 친구”
a++는 “일단 등장하고 나중에 준비하는 친구”

한가지 알아야 할 점은, ++a와 a++ 모두 타이밍만 다를 뿐, 변수의 값을 1 증가시키는 건 똑같다는 겁니다.

 


 

반복문 - for

 

이제 본격적으로 반복문을 통해 같은 작업을 여러번 하는 것을 간소화해 봅시다.

반복문에는 for, while, do while 이렇게 세가지 정도가 있는데,

이번 시간에는 가장 많이 쓰이고, 가장 구조가 명확한 for문을 먼저 배워볼 겁니다.

 

for문은 이렇게 생겼습니다.

for (초기값; 조건식; 증감식)
{
    반복하고 싶은 코드;
}


이 구조를 보면, for문은 '선언(초기값) → 조건(조건식) → 증감(증감식)’이라는 흐름을 가지고 있다는 걸 알 수 있습니다.

예시를 통해 이 for문의 흐름을 이해해보도록 합시다.

먼저 아래의 코드를 한번 입력해봅시다.

for (int i = 1; i <= 5; i++)
{
    printf("안녕하세요!\n");
}

 

이 코드는 "안녕하세요!"를 5번 출력합니다. 한 줄 한 줄, 흐름을 따라가 보겠습니다.

 

int i = 1;
→ 반복을 시작하기 전에 i라는 숫자 변수를 만들고 1로 시작합니다.

i <= 5;
→ 반복할 조건입니다. i가 5 이하일 동안 계속 반복합니다.

i++
→ 반복할 때마다 i를 1씩 증가시킵니다. (i = i + 1과 같은 말이에요)

이 과정을 그림처럼 나타내면 이렇게 됩니다.

i = 1 → "안녕하세요!"
i = 2 → "안녕하세요!"
i = 3 → "안녕하세요!"
i = 4 → "안녕하세요!"
i = 5 → "안녕하세요!"
i = 6 → 조건 불충족 → 반복 종료!

만약 저 위 문장에서 i++이 없다면 어떻게 될까요?? 결과는 끔찍하게도 '안녕하세요!'가 무한히 출력됩니다.

그 이유는 i <= 10은 항상 참이 되기 때문입니다. 왜냐구요? i++이 없으면 아무리 반복해도 i의 값은 계속해서 1로 고정일 테니까요.

 

조금만 더 응용을 해봅시다.

만약 ++(변수), (변수)++가 있다면 --(변수), (변수)--도 있지 않을까요?

그렇습니다 --(변수) 역시 존재합니다.

 

만약 아래처럼 코드를 짜면 어떨까요? 아마도 10부터 1까지의 수가 차례대로 출력되고 끝날겁니다.

for (int j = 10; j >= 1; j--)
{
    printf("%d\n", j);
}

 

int j = 10;
→ 반복을 시작하기 전에 j라는 숫자 변수를 만들고 10으로 시작합니다.

j >= 1;
→ 반복할 조건입니다. j가 1 이하가 될 동안 계속 반복합니다.

j--
→ 반복할 때마다 j를 1씩 감소시킵니다.

 

다음 시간엔 이어서 다른 반복문인 while과 do while, 이중 반복문 등을 배워보고 게임을 완성해보도록 하겠습니다.

 


 

AI피드백

 

Q. 오늘은 반복문에서 ++와 --, for에 대해서 배웠어. 이 반복문들이 어디에 쓰이고 어떻게 쓰이는지, 또 실제 개발환경에서 얼마나 자주 쓰이는지를 알려줄 수 있어??

그리고 오늘 배운 이 세가지를 가지고 풀 수 있는 예제 문제를 하나당 5개씩 총 15개를 만들어 줄 수 있을까?? 문제의 난이도는 쉬움, 중간, 어려움 이렇게 총 3단계로 조절해서 만들어주면 좋겠어

 

A.너무 좋다! 오늘 배운 ++, --, for문은 프로그래밍에서 가장 핵심적인 구조 중 하나야.

이걸 제대로 이해하면 거의 모든 자동화, 반복, 처리 로직을 설계할 수 있게 돼.

 

✅ 1. 오늘 배운 반복문 개념, 어디에 쓰일까?


for 반복문 정해진 횟수만큼 반복할 때 구구단, 배열 순회, 리스트 출력, 타이머 카운트 등
++, -- 값을 1씩 증가/감소할 때 자주 사용 반복 제어, 점수 계산, 인덱스 이동 등

 

 

🧠 2. 실제 개발 환경에서 얼마나 자주 쓰일까?

 

거의 매일, 무조건 쓰여.
프론트엔드든, 백엔드든, 게임엔진이든, 데이터 처리든 — 반복문 없는 코드 찾기가 더 어려울 정도야.

  • 게임 루프: for, while이 기본
  • 유저 리스트 출력, 순회
  • 조건 탐색, 데이터 필터링
  • 텍스트 처리, 애니메이션 반복 등등…

 

 

🎯 3. 오늘 배운 개념으로 풀 수 있는 예제문제 (총 15개)

범주: ++, --, for
난이도: 쉬움(5개), 중간(5개), 어려움(5개)

 

 

🟢 쉬움 (기초 문법 & 흐름 이해)

  1. 1~5까지 숫자를 for문으로 출력해보세요.
  2. 변수 x0부터 3까지 1씩 증가시키며 출력해보세요. (++ 사용)
  3. 변수 y5부터 1까지 1씩 감소시키며 출력해보세요. (-- 사용)
  4. 10을 시작점으로 두고 3번 반복하며 숫자를 출력하세요.
  5. for문을 사용해 "Hello"를 4번 출력해보세요.

 

🟡 중간 (조건 추가 + 논리 흐름 이해)

  1. 1~20 사이의 홀수만 출력해보세요. (if와 for 함께 사용)
  2. 5부터 1까지 감소하며 "카운트 다운"을 출력해보세요.
  3. 사용자에게 숫자 n을 입력받고, 1~n까지 더한 합을 구해 출력해보세요.
  4. for문으로 3의 배수1~30까지 출력해보세요.
  5. 10에서 0까지 --로 내려오다가 "발사!"를 출력하는 로켓 카운트다운을 만들어보세요.

 

🔴 어려움 (중첩, 조건 분기, 복합 로직)

  1. for문을 중첩해 구구단 2~4단을 출력해보세요.
  2. 사용자에게 숫자 n을 입력받고, n개의 *을 찍는 피라미드를 출력해보세요.
  3. 1~50까지 숫자 중, 3의 배수이면서 5의 배수인 수만 출력해보세요.
  4. for문으로 별 5개를 오른쪽 정렬 형태로 출력해보세요. ( *, **, ...)
  5. 1~100 사이에서 숫자를 하나씩 출력하면서,
      - 3의 배수면 "Fizz"
      - 5의 배수면 "Buzz"
      - 둘 다면 "FizzBuzz"를 출력하는 코드를 만들어보세요. (← 유명한 실전 문제!