The Pawn language - CompuPhase

반복문(for)

개요

반복문은 무언가 '반복' 할 일이 있을 때 유용합니다. 이 챕터에서는 for 반복문에 대해 배웁니다. 예제를 보고 이해해 보겠습니다.

for 반복문

우선 반복문의 형태부터 살펴보도록 하겠습니다.

for(초기식; 조건식; 증감식)
{
    // 코드
}
  • 초기식
    • 초기식은 반복문이 시작될 때에 1번 실행되고 더 이상 실행되지 않습니다.
    • 주로 new i = 0; 과 같이 변수 선언과 초기화가 들어갑니다.
  • 조건식
    • 여기에 기입한 조건식이 true 라면 반복문 안의 코드가 실행됩니다.
    • 조건이 false가 될 때까지 계속해서 코드가 실행됩니다.
    • 조건식 -> 코드 -> 조건식 -> 코드 -> ... 이런 식으로 반복 실행됩니다.
  • 증감식
    • 코드가 실행된 후 조건식으로 돌아가기 전에 거치는 부분입니다.
    • 주로 i++ 와 같이 변수를 증가시켜주는 코드를 작성합니다.
    • 조건식 -> 코드 -> 증감식 -> 조건식 -> 코드 -> 증감식 -> ... 순서로 실행됩니다.

역시 예제를 보는 것이 이해가 편할 수 있습니다.

for 반복문: 예제 1 (순차 증가)

만약 1부터 10까지 더하고 싶다면 어떻게 해야 할까요? 식으로는 1+2+3+4+5+6+7+8+9+10 이 될 것입니다. 이것을 반복문을 이용해서 처리할 수 있습니다.

new sum = 0;
for(new i=1; i<=10; i++)
{
    sum += i;
}

초기식에 i 라는 변수를 사용하였고, 초기값은 1입니다.

조건식은 i<=10 인데 i가 10보다 작거나 같으면 코드를 실행하겠다는 의미입니다.

증감식은 i++로서 코드가 실행된 후 i가 1 증가합니다.

자세한 실행 순서는 다음과 같습니다.

  • new i = 1; (초기식)
  •  
  • i <= 10; (조건식)( i=1 이므로 true)
  • sum += i; (코드 실행)(sum에 1이 더해짐)
  • i++; (증감식)( i=2 가 됨)
  •  
  • i <= 10; (조건식)( i=2 이므로 true)
  • sum += i; (코드 실행)(sum에 2가 더해짐)
  • i++; (증감식)( i=3 이 됨)
  •  
  • ... ...
  •  
  • i <= 10; (조건식)( i=10 이므로 true)
  • sum += i; (코드 실행)(sum에 10이 더해짐)
  • i++; (증감식)( i=11이 됨)
  •  
  • i <= 10; (조건식)( i=11 이므로 false)
  • (반복문 종료)

다소 복잡하죠? 복잡하게 써져 있지만 결국은 (조건식 -> 코드 실행 -> 증감식)이 반복된다는 것을 알 수 있습니다. 위 코드는 sum += i; 가 10번 실행되었고, 1부터 10까지가 sum에 더해졌습니다.

위의 내용이 잘 이해가 되지 않으시면 과감히 패스하고 다음 예제를 보도록 하겠습니다.

for 반복문: 예제 2 (순차 증가)

이번에는 팩토리얼(factorial)을 구해보겠습니다. 수학 시간에 배워서 아시겠지만 5! 은 1*2*3*4*5를 의미합니다. 아래 예제는 5 팩토리얼을 구하는 코드입니다.

new fact = 1;
for(new i=1; i<=5; i++)
{
    fact *= i;
}

자 이제 for문을 쉽게 이해하는 법을 가르쳐 드리겠습니다. i가 어떻게 변하는지를 확인하는 방법입니다.

  1. new i=1; 부분을 통해 시작이 1이라는 것을 확인합니다.
  2. i <= 5 를 통해 i가 5까지 증가하겠다는 것을 확인합니다.
  3. i ++ 을 통해 i가 1씩 증가하겠다는 것을 확인합니다.

위 세 가지 사항을 조합해보면 i는 1부터 5까지 1씩 증가하겠다는 것을 확인할 수 있습니다. i는 1,2,3,4,5가 될 것입니다. 따라서 fact *= i; 코드가 어떤 식으로 동작할 지도 예상이 가능합니다. 실제 동작은 아래와 같을 것입니다.

  • fact *= 1;
  • fact *= 2;
  • fact *= 3;
  • fact *= 4;
  • fact *= 5;

for 반복문: 예제 3 (차등 증가)

기존까지는 i가 1씩 증가했습니다. 즉 1,2,3,4,5,... 이런 식으로 증가했죠. 이번에는 차등 증가에 대해서 익혀보도록 하겠습니다.

다음 예제는 10부터 100까지 2의 배수만을 모두 더하는 코드입니다. 계산 결과는 10+12+14+...+96+98+100 이 될 것입니다.

new sum = 0;
for(new i=10; i<=100; i+=2)
{
    sum += i;
}

이제 코드를 보면 감이 오시나요? for문의 코드를 잘 보면 i가 10부터 시작하며, i는 100까지, 2씩 증가한다는 것을 알 수 있습니다. 따라서 sum += i 코드는 아래와 같이 실행될 것입니다.

  • sum += 10;
  • sum += 12:
  • sum += 14;
  • ...
  • sum += 96;
  • sum += 98;
  • sum += 100;

for 반복문: 예제 4 (배수 증가)

이번에는 아래 코드가 어떤 역할을 하는지 설명드리지 않고 코드부터 보여드리도록 하겠습니다. 한 번 의미를 추측해 보시기 바랍니다. 다소 어려울 수 있습니다.

new sum = 0;
for(new i=1; i<200; i*=2)
{
    sum += i;
}

잘 보시면 i가 1부터 199까지라는 점은 쉽게 알아볼 수 있으나, 증감식이 i *= 2 인 점이 생소합니다.

(i가 199까지라는 점도 헷갈릴 수 있습니다. i<200은 199까지를 의미합니다. i<=200은 200까지를 의미합니다.)

천천히 보도록 하겠습니다. i *= 2는 i가 2배씩 증가한다는 소리입니다. 만약 시작이 1일 경우 1,2,4,8,16,32,...를 의미하는 것입니다! 따라서 i는 1,2,4,8, ..., 32,64,128 까지 증가할 것입니다. 만약 i=256이 된다면 i<200 조건이 false가 되므로 실행이 되지 않을 것입니다.

따라서 위 코드는 200보다 작은 범위 안에서 2의 제곱을 전부 더하는 코드입니다. 1+2+4+8+...+32+64+128의 결과를 얻을 수 있습니다.

for 반복문: 예제 5 (순차 감소)

이번에는 증가가 아니라 감소에 대해서 배워봅니다. 여러 부분이 바뀌므로 잘 보시기 바랍니다.

아래 예제는 20부터 5까지 감소하는 반복문입니다.

new sum = 0;
for(new i=20; i>=5; i--)
{
    sum += i;
}

어떤 점이 바뀌었는지 잘 생각해 보시기 바랍니다. 시작점이 20이 되었고, 조건의 부등호가 반대로 바뀌었습니다. 조건이 i>=5 이므로 i가 5보다 크거나 같아야만 반복이 진행될 것입니다. 그리고 증감식은 i를 한 개 감소시키도록 변경되었습니다. 따라서 i는 20,19,18,...,7,6,5로 감소될 것입니다.

정리

여러 예제를 통해 for 반복문의 사용법에 대해 배워보았습니다. 어려워 보이지만 잘 이해하면 꽤나 단순하다는 것을 아실 수 있을 것입니다.

  • 초기식을 통해 i가 어디부터 시작할 지를 정해줍니다.
  • 조건식을 통해 i가 어디까지 변화할 지를 정해줍니다.
  • 증감식을 통해 i가 몇 단위로 증가/감소할 지를 정해줍니다.

위의 단순한 사용법을 통해 반복문을 사용하실 수 있습니다.

for 반복문은 위의 예제들과 같이 주로 '순차적으로 증가'하는 값이 필요할 때 사용됩니다. 만약 규칙성이 없고 조건이 시시각각 변하는 상황에서 반복문을 사용하고자 한다면 다음 챕터에서 배울 while 반복문을 사용해야 합니다.

댓글

댓글 본문
  1. 준영
    1번 읽음.