책 내용 질문하기
2019 정보처리기사 모의고사 1회 1번, 2번문제 질문드려요!!!
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
0
조회수
181
작성일
2019-04-09
작성자
탈퇴*원
첨부파일
1. 1번문제에서 1번 i-j 2번 b 가 답이 되던데 답안에는 설명이 적어서 좀 자세하게 알려주시면 감사하겠습니다. 2. 2번문제 답이 22번이던데 답안만 보고는 이해가 잘 안가서 왜 22가 나오는지 정확한 원리로 알려주시면 감사하겠습니다.
답변
2019-04-10 10:26:10

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

 

[1]

배열 내의 숫자를 특정 순서대로 적어넣어야 하는 경우 각 배열 위치 값들의 변화를 파악하셔야 합니다.

1회전 0,0

2회전 0,1 - 1,0

3회전 0,2 - 1,1 - 2,0

....

이런 식으로 말이죠.

 

코드에서 앞의 a[j][ ? ] = c 는 배열 북서쪽을, a[n-j][n-(i-j)] = c 는 남동쪽 방향을 채우는 것을 알 수 있습니다. 남동쪽 방향을 채우는 코드를 수행해보면 채워지는 과정을 알 수 있으니까요.

 

잘 보면 남동쪽 방향을 채우는 코드는 북서쪽의 역방향입니다. 'n-'를 생각해보세요.

1회전 4,4

2회전 4,3 - 3,4

3회전 4,2 - 3,3 - 2,4

 

이제 뭔가 추측이 되죠.. 배열의 최대 위치값 n-를 통해 역방향으로도 값을 넣고 있기 때문에, n-만 빼고 1번 빈칸에 넣으면 <출력> 과 동일하게 값이 저장되게 됩니다.

 

2번 빈칸의 경우 자바의 향상된 for문에 해당하는 부분입니다.

이것은 교재 1권 111쪽 문제 2번의 해설을 참고해주세요.

 

 

[2]

사용자 정의 함수와, 포인터, 그리고 함수의 합 알고리즘이 함께 응용된 코드입니다.

 

먼저 사용자정의 함수를 호출함에 있어 포인터를 사용하였으므로, 리턴값이 없어도 같인 포인터 주소를 갖고 있는 포인터 변수로 인해 변수 a의 값이 함께 변화함을 알아두세요.

, a = *result = *r은 동일한 값을 가지게 됩니다.

 

main함수는 단순히 re함수를 호출하고 변수 a를 출력하는 역할을 합니다.

 

re함수는 i2~5까지 회전시키면서 pn함수로 리턴받은 값을 포인터 변수 r이 가리키는 값(*r)에 누적시키죠.

(while 반복문을 보면 1에 진입하여 pn(i)가 수행될 때의 i값은 2~5임을 확인할 수 있습니다.)

 

pn함수는 교재 1188쪽의 알고리즘을 그대로 적용하여 합이 출력되는 부분을 합을 리턴하도록 수정한 것입니다.

, pn함수에서

p2인 경우 소수 2를 리턴하고,

p3인 경우 소수 2, 3의 합을 리턴하고,

p4인 경우 소수 2, 3의 합을 리턴하고,

p5인 경우 소수 2, 3, 5의 합을 리턴하게 되죠.

 

다시 re함수에서는 위 결과들의 합을 *r에 저장함에 따라 a의 값이 변화되어 마지막 main()함수에서 a를 출력하게 되면 *r과 동일한 값을 출력하게 되는 것이죠.

 

행복한 하루되세요 :)

  • 관리자
    2019-04-10 10:26:10

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

     

    [1]

    배열 내의 숫자를 특정 순서대로 적어넣어야 하는 경우 각 배열 위치 값들의 변화를 파악하셔야 합니다.

    1회전 0,0

    2회전 0,1 - 1,0

    3회전 0,2 - 1,1 - 2,0

    ....

    이런 식으로 말이죠.

     

    코드에서 앞의 a[j][ ? ] = c 는 배열 북서쪽을, a[n-j][n-(i-j)] = c 는 남동쪽 방향을 채우는 것을 알 수 있습니다. 남동쪽 방향을 채우는 코드를 수행해보면 채워지는 과정을 알 수 있으니까요.

     

    잘 보면 남동쪽 방향을 채우는 코드는 북서쪽의 역방향입니다. 'n-'를 생각해보세요.

    1회전 4,4

    2회전 4,3 - 3,4

    3회전 4,2 - 3,3 - 2,4

     

    이제 뭔가 추측이 되죠.. 배열의 최대 위치값 n-를 통해 역방향으로도 값을 넣고 있기 때문에, n-만 빼고 1번 빈칸에 넣으면 <출력> 과 동일하게 값이 저장되게 됩니다.

     

    2번 빈칸의 경우 자바의 향상된 for문에 해당하는 부분입니다.

    이것은 교재 1권 111쪽 문제 2번의 해설을 참고해주세요.

     

     

    [2]

    사용자 정의 함수와, 포인터, 그리고 함수의 합 알고리즘이 함께 응용된 코드입니다.

     

    먼저 사용자정의 함수를 호출함에 있어 포인터를 사용하였으므로, 리턴값이 없어도 같인 포인터 주소를 갖고 있는 포인터 변수로 인해 변수 a의 값이 함께 변화함을 알아두세요.

    , a = *result = *r은 동일한 값을 가지게 됩니다.

     

    main함수는 단순히 re함수를 호출하고 변수 a를 출력하는 역할을 합니다.

     

    re함수는 i2~5까지 회전시키면서 pn함수로 리턴받은 값을 포인터 변수 r이 가리키는 값(*r)에 누적시키죠.

    (while 반복문을 보면 1에 진입하여 pn(i)가 수행될 때의 i값은 2~5임을 확인할 수 있습니다.)

     

    pn함수는 교재 1188쪽의 알고리즘을 그대로 적용하여 합이 출력되는 부분을 합을 리턴하도록 수정한 것입니다.

    , pn함수에서

    p2인 경우 소수 2를 리턴하고,

    p3인 경우 소수 2, 3의 합을 리턴하고,

    p4인 경우 소수 2, 3의 합을 리턴하고,

    p5인 경우 소수 2, 3, 5의 합을 리턴하게 되죠.

     

    다시 re함수에서는 위 결과들의 합을 *r에 저장함에 따라 a의 값이 변화되어 마지막 main()함수에서 a를 출력하게 되면 *r과 동일한 값을 출력하게 되는 것이죠.

     

    행복한 하루되세요 :)

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