Unity_사전캠프

[사전캠프 6일차] for, while, do-while? 반복문, 그리고 배열.

티백고래 2025. 3. 24. 19:39

1. 오늘 학습 키워드

for, while, do-while. 전부 반복되는 코드를 작성할 때 사용한다.

각 반복문의 작성법과, 차이점을 확인해볼 예정이다.

 

또한 배열에 대해서 가볍게 알아보고 지나갈 것이다.

 

2. 오늘 학습 한 내용을 나만의 언어로 정리하기

Step1. For 문

조건 1: For문을 사용해서 반복문 작성

조건 2: 1부터 100중 홀수만 출력되도록 만들기

 

for문의 구성은 상당히 단조롭다. for 뒤에 (초기값, 조건식, 증감연산)이 들어가면 끝이다.

조건을 만족하면 for문은 자동으로 완료된다. 그러나 반대로, '조건 자체를 만족할 수 없는 상태'가 될 경우 무한히 반복하다가 프로그램이 정지한다. 

그러므로, for 문을 작성할 때는 반드시 어느 지점에서 조건을 만족하도록 만들어야한다. 

 

코드 1.

더보기

for (int i = 1; i < 100; i = i+2) (초기값 i=1 / i는 100 미만 / i는 이전 i값에 +2를 계속 더한다.)
{
    Console.WriteLine(i);  //반복되는 i값을 확인하기 위해 화면에 i값의 출력을 명령
}

조건이 명확할 경우 for문은 간단하게 정리할 수 있다는 장점이 있다.

특히 조건을 만족하는 한 계속해서 반복하기 때문에, 반복횟수가 정해져있다면 for문이 편리하다.

더군다나 for뒤에 바로 반복되는 초기조건과 조건, 식이 전부 적혀 있기 때문에 가독성도 좋다.

하지만 이미 '반복할 수식'을 지정해두고 이를 조작할 수 없게 막아둔 상태이기 때문에, 얼마나 반복해야 될 지 알 수 없을 때는 부적합하다.(예시: 외부의 입력을 통해 중간에 변수를 계속 바꾸는 경우.)

 

 

Step 2. while문

조건 1: while문을 이용한 반복문 작성

조건 2: 1부터 100까지 홀수만 출력되도록 하기

 

while문은 조건문이 참인 동안 반복하는 조건문이다.

조건이 참인 동안 반복한다는 점에서 for 문과 크게 다를 것 없어보이기도 한다. 

while문은

while(조건)

{

     동작문

}

로 구성된다. 초기값을 넣고 싶다면 반복문 앞에서 미리 설정해두면 된다.

 

코드2.

더보기

int w = 1;

//초기값을 미리 설정한다.
while (w < 100)  //반복될 조건식은 while 뒤에 넣는다.
{ //여기부터는 조건이 거짓이 될 때까지 반복될 실행 코드들이 들어간다.
    Console.WriteLine(w); //w값을 확인하기 위해 화면에 w값의 출력을 명령

    //첫 w값부터 확인하기 위해 Console. WriteLine을 먼저 넣었다. 또한, 99+2인 101이 출력되지 않도록 위함도 있다.
    w = w + 2;  //w += 2;로 작성해도 된다.
}

코드 2는 for 문과 같이 1부터 100까지의 숫자를 반복하기 위해 같은 수식을 넣었다.

하지만 while문에서 필수적인 것은 while(조건식)과 조건을 만족하는 동안 반복시킬 동작식이다.

그렇다면, for문과의 차이점이 생긴다.

반드시 주어진 조건을 이용한 반복계산을 하는 for문과는 달리, while문은 입력한 값을 이용해 조건을 충족시키는 반복문을 만들 수 있다는 점이다.

즉, while문은 좀 더 유동적인 반복문을 만들 수 있다. 

다만 초기값, 조건식, 동작식이 들어가는 장소가 각각 다르기 때문에 가독성은 좋지 않다.

 

 

Step 3. do-while문

조건 1: do-while문을 이용한 반복문 작성

조건 2: 1부터 100까지 홀수만 출력되도록 하기.

 

do-while문은 5일차에도 한 번 작성했던 식이다.

전체적인 구성은 while문과 비슷하지만, 차이점은 조건이 false 여도 최초 한 번은 입력된 값을 출력한다는 것이다.

 

코드 3

더보기

int w = 1; //초기값 설정
do
{ //여기부터 반복되는 실행문 작성
    Console.WriteLine(w);
    w += 2;  //일반 while문과 들어갈 내용이 크게 달라지지 않는다.

} while (w<100); //조건식

 

전반적으로 while문과 비슷한 형태를 가지고 있다. while()부분이 반복문의 최하단으로 가고, 대신 그 자리를 do가 차지하고 있을 뿐이다.
다만, 조건이 맞지 않아도 반드시 최초 1회는 실행한다는 점에서, 5일차 닉네임 설정에서의 do-while 코드처럼 입력값을 넣고 그에 따른 응답이 반드시 1회는 필요한 경우에 쓰기 좋다.

 

step 4. 배열과 반복문

조건 1: 배열의 생성

조건 2: 전부 더하고, 평균을 만든다.

 

반복문 하다가 갑자기 배열이 나와서 의문스러울 것이다.

하지만 배열을 제대로 쓰는 것은 내일 할 것이고, 오늘은 반복문의 연장선으로, 가볍게 해볼 생각이다.

배열은 [ ]의 형태로 나타낸다. [ ]안에 들어가는 것은 방의 개수이다. 즉 [3]으로 작성할 경우, [0], [1], [2]의 방 3개가 만들어지는 것이다. ([3]까지 만들어지는 것이 아니다. 참고하자.)

물론 [ ] 만 단독으로 써서는 배열이 되지 않는다. 보통 int [ ](정수배열), string [ ](문자열 배열) 등으로 사용한다.

그럼, 조건에 맞춰서 코드를 만들어볼 것이다.

 

코드 4.

더보기

int[] num = new int[5]; //배열을 만든다. 배열의 방을 0부터 4까지 있는 총 5개의 방으로 만들었다.

 

//배열 안에 등록할 수 지정 시작
Console.WriteLine("첫 번째 수를 입력해 주세요");
string n0 = Console.ReadLine();
int num0; //정수로 변환될 이름을 지정

Console.WriteLine("두 번째 수를 입력해 주세요");
string n1 = Console.ReadLine();
int num1;

Console.WriteLine("세 번째 수를 입력해 주세요");
string n2 = Console.ReadLine();
int num2;

Console.WriteLine("네 번째 수를 입력해 주세요");
string n3 = Console.ReadLine();
int num3;

Console.WriteLine("다섯 번째 수를 입력해 주세요");
string n4 = Console.ReadLine();
int num4;

 

//TryParse를 이용해, if 조건문에서 전부 정수가 들어갔는지 확인할 수 있도록 함.
bool x0 = int.TryParse(n0, out num0);
bool x1 = int.TryParse(n1, out num1);
bool x2 = int.TryParse(n2, out num2);
bool x3 = int.TryParse(n3, out num3);
bool x4 = int.TryParse(n4, out num4);

 

//각 배열의 방에 입력값이 바로 들어갈 수 있도록 장치.
num[0] = num0;
num[1] = num1;
num[2] = num2;
num[3] = num3;
num[4] = num4;

 

if (x0 && x1 && x2 && x3 && x4) // 5개의 수가 전부 '정수'일 때 계산 시작.
{
    float sum = 0; //합계를 의미할 sum을 미리 초기값 0으로 지정.
    for (int i = 0;i<5; i++) //배열 [ ]에 들어갈 임의의 정수 i를 지정, 생성.
    {
        sum = sum + num[i]; //0부터 배열 0번부터 계속 더하도록 함.
    }

    Console.WriteLine("합계");
    Console.WriteLine(sum); //최종 sum(합계)를 출력하도록 명령

 

    float Aver = sum / 5f; // 5개의 수의 평균을 내는 것이므로 나누기 5f (float값 필수)
    Console.WriteLine("평균");
    Console.WriteLine(Aver); //평균값(Average) 출력
}
else //5개의 입력창 중 하나라도 정수가 아닌 경우.
{
    Console.WriteLine("정수만 입력하세요.");

 

콘솔 창 내에서 이루어진 계산

 

실제 계산. 여기서 나누기 5를 하면 60이 나오므로 평균값도 맞다.

배열 속에 입력될 0번부터 4번까지의 빈칸을 만들고, 각각의 칸에 숫자가 들어갈 수 있도록 만들었다.

그리고 그 값을 if문을 이용해 전부 정수임을 확인했다. 정수임이 확인되면  for 문을 이용해 차례로 더하게 만들어 합계를 만들고, 마지막으로 더한 값을 5로 나누어 평균을 냈다.

 

길고 복잡해보이지만, 주석을 따라 하나하나 뜯어보면 생각 이상으로 복잡하지는 않은 수식이 된다.

(그래도 역시 초보자 입장에서는 복잡하다. 제가 그렇습니다.)

 

배열의 장점은, 이미 '형성된 방''원하는 데이터''저장'해준다는 것이다. 즉, 내가 1에 79를치든 1560을 치든, 아무튼 조건에 맞는 입력값이라면 방에 들여보내준다.

그럼 우리는 그 배열의 방을 선택하기만 하면 된다. 

배열은 특히, 데이터가 점점 많아질 경우에 더 유용하게 쓸 수 있지 않을까 생각한다.

가령 숫자는 num, 캐릭터 정보는 Char, 적의 정보는 Enemy 등으로 표기하여 방에 각각 넣어주면 꺼내쓰기 쉬울 것 같다.

 

3. 학습 요약

for 문과 while문과 do-while문의 차이점

for문: 1부터 2씩 더해서 최대 100까지 채워라.

while문: 100이 되기 전까지 2씩 더해줘. 근데 처음 값이 이미 100넘었으면 말하지 않아도 된다.

do-while문: 100이 되기 전까지 2씩 더해줘. 처음 값이 100넘었어도 일단 한 번 보여줘.

 

for문은 조건이 명확할 때 사용하기 좋고, 가독성이 좋다.

while문은 조건이 불명확할 때 사용하기 좋고 유동성이 좋다. 하지만 가독성은 떨어진다.

do-while문은 while문과 거의 같지만, 반드시 최초 1회는 실행한다.

 

배열

(int/string/float 등) name [5] = 방 5개(0부터 4까지이다. 5가 아니다.)

[n] = 방은 n개, 방 번호는 0부터 n-1까지. 

name [0] = (문자열 혹은 숫자 등) 을 작성하여 방에 데이터를 저장할 수 있다.

ex) name [0] = "제스트"

 

4. 내일 학습 할 것은 무엇인지

다음 시간에는 팩토리얼 계산을 해볼 것이다.
n! 표시의 그 팩토리얼 맞다.

그리고 Random 기능을 활용하여 숫자 하나를 맞추는 가벼운 게임도 만들어볼 예정이다.