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번 읽음.
버전 관리
Acu
현재 버전
선택 버전
graphittie 자세히 보기