책 내용 질문하기
강의랑 책의 내용이 다릅니다
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
201,202
조회수
263
작성일
2019-08-15
작성자
탈퇴*원
첨부파일

안녕하세요 강의와 책으로 공부를 병행하고 있는데 강의와 책 내용이 다른 부분이 있어서 질문 드립니다.

 

201쪽 알고리즘에서는 4번이고 202쪽 C에서는 4번째 줄인데 이게 반복에 포함되는지와 안되는지가 좀 다릅니다. 

책에서는 반복문에 포함이 되었는데 책의 내용이 맞는 것 같긴 한데 혹시 어느것이 맞는 건지 알려주실 수 있을까요?

 

 

감사합니다~ 

답변
2019-08-16 11:34:25

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

 

제수가 저장되는 변수 D는 바깥쪽 반복문에 포함되어도, 되지 않아도 알고리즘은 정상적으로 수행됩니다.

다만 교재 200쪽의 [알고리즘의 이해] 부분대로 진행한다고 가정하면 D=2는 반복문에 포함되어야 합니다. 

 

포함되지 않아도 되는 이유는 제수가 증가하는 조건인 '나머지가 0이 아닌 경우'로 인해 더 이상 피제수가 제수로 나눠지지 않는 경우에만 D=D+1을 수행하기 때문입니다.

변수 D가 가진 수로 더이상 나눠질 수 없을 때 증가하기 때문에 해당 수를 다시 나눌 필요가 없어지게 되고, D를 2로 초기화하는 과정이 필요없게 됩니다. 

 

D=2가 반복문에 포함되지 않는 것이 더 효율적인 알고리즘이지만, 실제 시험에서는 반복문에 포함된 순서도가 출제된 적이 있었으므로 두 경우 모두 이해하고 넘어가시길 바랍니다.

 

행복한 하루되세요 :)

  • 관리자
    2019-08-16 11:34:25

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

     

    제수가 저장되는 변수 D는 바깥쪽 반복문에 포함되어도, 되지 않아도 알고리즘은 정상적으로 수행됩니다.

    다만 교재 200쪽의 [알고리즘의 이해] 부분대로 진행한다고 가정하면 D=2는 반복문에 포함되어야 합니다. 

     

    포함되지 않아도 되는 이유는 제수가 증가하는 조건인 '나머지가 0이 아닌 경우'로 인해 더 이상 피제수가 제수로 나눠지지 않는 경우에만 D=D+1을 수행하기 때문입니다.

    변수 D가 가진 수로 더이상 나눠질 수 없을 때 증가하기 때문에 해당 수를 다시 나눌 필요가 없어지게 되고, D를 2로 초기화하는 과정이 필요없게 됩니다. 

     

    D=2가 반복문에 포함되지 않는 것이 더 효율적인 알고리즘이지만, 실제 시험에서는 반복문에 포함된 순서도가 출제된 적이 있었으므로 두 경우 모두 이해하고 넘어가시길 바랍니다.

     

    행복한 하루되세요 :)

  • 관리자
    2019-08-19 09:56:16

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

     

    D = D + 1 이 수행되는 시점을 정확히 파악하셔야 합니다.

     

    D가 초기화 되지 않고, 12를 소인수 분해한다고 가정해보겠습니다.

     

    12는 먼저 D(2)로 나눠집니다. (B=12)

    그렇면 10번 순서도에서 Yes로 넘어가 배열 A에 2가 저장되겠죠.

    다시 5번으로 넘어와 진행하면

    6은 다시 D(2)로 나눠집니다. (B=6)

    위와 동일하게 배열 A에 2가 저장되고 5번으로 넘어갑니다.

    3의 제곱근 값이 2보다 작으므로 6번에서 Yes로 넘어가 A 배열에 B의 값(3)을 넘기고 끝납니다.

    이로써 결과는 2x2x3 이 출력되게 됩니다. 

     

    D를 2로 초기화하지 않아도 되는 이유는 변수 D가 +1이 되기 전에 나눠떨어지는 만큼 여러번 나누어지기 때문입니다.

    예를 들어 2의 제곱수인 64는 D=D+1이 한 번도 수행되지 않고 2로만 나누어져 끝나겠죠.

    (초기화를 수행하지 않았음에도)

     

    만약 소인수 분해가

    2x2x2x3x3x3x5x7  (7560)

    요렇게 되는 B값이 입력되었다고 가정해보세요.

    위의 출력에서 B가 다시 2로 초기화될 이유가 없죠.

    2로 나눌만큼 나누고, 3으로 나눈 후, 5, 7로 나누게 되니까요.

     

    만약 아직도 이해가 어려우시다면 B=2 초기화를 하지 않는 순서도의 디버깅을 해보세요.

    입력은 2가 여러번 나눠지고 3,5,7 등의 수도 포함되는 소인수 분해 값이 나오는 수가 좋습니다.

     

    행복한 하루되세요 :)

  • *
    2019-08-17 14:44:02

    안녕하세요

     

    나머지가 0이 아닌 경우에, D=2의 과정이 없어도 된다고 하셨는데, 설명해주신 경우로는 D=2인 경우가 계산되지 않게 됩니다. 다른 수를 나누는 과정에서 D가 증가하여 3이나, 4, 그 이상으로 D가 올라가게 될건데 D=D+1는 D=2가 생략되는걸 커버하지 못한다고 생각합니다. 오히려 D=2를 꼭 계산하면서 증가해야 하는데, 말씀하신대로 D=D+1보다 D=D-1를 해야 결과가 다를지언정 한번은 2를 계산하게 되지 않을까 싶습니다.

     

    기존 질문한 글에 대한 답변이 이해가 되지 않아서 다시 질문드립니다.

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