책 내용 질문하기
제가 풀면 11이 나옵니다
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
76
조회수
231
작성일
2019-08-20
작성자
탈퇴*원
제 디버깅이 어디에서 틀렸는지 봐주시고, i가 1이 되었을 때는 반복문에서 벗어나야하는데 그렇다면 hap 값은 i가 4일때 멈추는 것이 아닌가 궁금합니다.
답변
2019-08-20 10:47:09

안녕하세요 길벗수험서 운영팀입니다.

 

먼저 디버깅에서는 잘못된 점이 보이지 않습니다. 좀 더 정확성을 기하기 위해서는 while(i>1)을 한 시점을 파악할 수 있도록 디버깅 표에 추가하는 것도 괜찮아 보이네요.

 

코드를 서술로 진행해보면,

 

먼저 i가 10, hap이 0으로 초기화된 상태에서 while문으로 진입합니다.

while(10 >1) True

1. i는 9가 되고,

2. 9를 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

 while(9 >1) True

3. i는 8이 되고

4. 8을 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

 while(8 >1) True 

5. i는 7이 되고

6. 7을 3으로 나눈 나머지는 1이므로 hap에 7을 누적합니다. (hap=7)

while(7 >1) True 

7. i는 6이 되고

8. 6을 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

while(6 >1) True  

9. i는 5가 되고

10. 5를 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

while(5 >1) True  

11. i는 4가 되고

12. 4는 3으로 나눈 나머지는 1이므로 hap에 4를 누적합니다. (hap=11)

while(4 >1) True  

13. i는 3이 되고

14. 3을 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

while(3 >1) True  

15. i는 2가 되고

16. 2를 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

while(2 >1) True  

17. i는 1이 되고

18. 1을 3으로 나눈 나머지는 1이므로 hap에 1을 누적합니다. (hap=12)

while(1 >1) False 

19. i가 i>1을 만족하지 않으므로 while문을 빠져나가 hap을 출력합니다.

 

답 : 12

 

위에서 16~19 과정을 살펴보세요. i가 2일 때 while 조건문을 지나 i--를 만나 i는 1이 되고 if문을 만나 hap에 1이 더해집니다. i가 1인 상태에서 while문을 만나 while(1>1) 을 수행하게 되는 시점은 이미 1이 더해진 이후라는 점에 유의하세요.

 

행복한 하루되세요 :)

  • 관리자
    2019-08-20 10:47:09

    안녕하세요 길벗수험서 운영팀입니다.

     

    먼저 디버깅에서는 잘못된 점이 보이지 않습니다. 좀 더 정확성을 기하기 위해서는 while(i>1)을 한 시점을 파악할 수 있도록 디버깅 표에 추가하는 것도 괜찮아 보이네요.

     

    코드를 서술로 진행해보면,

     

    먼저 i가 10, hap이 0으로 초기화된 상태에서 while문으로 진입합니다.

    while(10 >1) True

    1. i는 9가 되고,

    2. 9를 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

     while(9 >1) True

    3. i는 8이 되고

    4. 8을 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

     while(8 >1) True 

    5. i는 7이 되고

    6. 7을 3으로 나눈 나머지는 1이므로 hap에 7을 누적합니다. (hap=7)

    while(7 >1) True 

    7. i는 6이 되고

    8. 6을 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

    while(6 >1) True  

    9. i는 5가 되고

    10. 5를 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

    while(5 >1) True  

    11. i는 4가 되고

    12. 4는 3으로 나눈 나머지는 1이므로 hap에 4를 누적합니다. (hap=11)

    while(4 >1) True  

    13. i는 3이 되고

    14. 3을 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

    while(3 >1) True  

    15. i는 2가 되고

    16. 2를 3으로 나눈 나머지는 1이 아니므로 hap의 값은 변동이 없습니다.

    while(2 >1) True  

    17. i는 1이 되고

    18. 1을 3으로 나눈 나머지는 1이므로 hap에 1을 누적합니다. (hap=12)

    while(1 >1) False 

    19. i가 i>1을 만족하지 않으므로 while문을 빠져나가 hap을 출력합니다.

     

    답 : 12

     

    위에서 16~19 과정을 살펴보세요. i가 2일 때 while 조건문을 지나 i--를 만나 i는 1이 되고 if문을 만나 hap에 1이 더해집니다. i가 1인 상태에서 while문을 만나 while(1>1) 을 수행하게 되는 시점은 이미 1이 더해진 이후라는 점에 유의하세요.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.