인프런 커뮤니티 질문&답변

코린이님의 프로필 이미지

작성한 질문수

C++ Let's Make Games

빙고게임 2

iStar 초기화

20.03.31 23:21 작성

·

222

0

  int iStar1 = 0, iStar2 = 0;

        for (int i = 0; i < 5; ++i)

        {

            iStar1 = iStar2 = 0;

            for (int j = 0; j < 5; ++j)

            {

                if (iNumber[i * 5 + j] == INT_MAX)

                    ++iStar1;

            }

            if (iStar1 == 5)

               ++iBingo;

}

 맨 위에 iBingo를 0으로 초기화 하는 이유는 직접 실행해보고 알았습니다.

그런데 iStar1, 2를 0으로 초기화 안하면 어떻게 되는지 궁금해서 저 라인을 지우고 실행해 봤더니 첫줄 *이 5개가 채워지기 전까지

**iii

iiiii

iiiii

iiiii

 이런 상황에선 빙고라인이 0이었다가 5개가 채워지는 순간

*****

iiiii

iiiii

iiiii

iiiii

빙고라인이 5가 되고 그 이후 *이 추가되는 순간

*****

*iiii

iiiii

iiiii

iiiii

빙고라인이 1이 되서 아무리 *을 늘려도

*****

*****

*****

****i

iiiii

빙고라인이 1에서 변하지 않던데요. 

이부분이 논리적으로 왜그렇게 되는건지 이해가 가질 않아서요...iStar를 매번 초기화 하는것과 않는것에 프로그램상 어떤 차이가 생기는 건가요?

저 코드의 순서가 for i 문에 들어가서 i는 0일때 j 는 0~4까지 실행하고 ++bingo까지 실행한뒤 다시 i=1일때로 반복하는 구조라서 그런건지. 그렇다고 해도 빙고가 5가 되었다가 다시 1로 바뀌는 이유를 도저히 모르겠습니다.

답변 1

0

김동헌님의 프로필 이미지

2020. 04. 01. 13:11

1번째 줄의 iStar1, iStar2 = 0 한 이유는 당연히 사용자가 입력할 때마다 초기화 해줘야 해서 한거구요.

4번째줄에서 0으로 초기화 시킨 이유는요,

첫번째 for구문이 가로줄이 전체가 *일때를 구분하기 위해서 5번돌리는건데 첫번째줄이 *로 가득차서 iStar 이 5가되면 ++iBingo를 수행하게 됩니다. 그런데 0으로 초기화를 안해주고 첫번째 for구문이 다시 실행되면서 두번째 가로줄 체크할때도 iStar는 5인상태에서 실행되구요, 세번째가로줄 체크할때도 iStar은 5입니다. 그래서 5번째줄까지 체크해도 iStar은 5이기때문에 if문에 의하여 계속 ++iBingo가 된거에요. 즉 Bingo line이 다섯번 추가되었기 때문에 5라고 출력되는거겠죠.