각종 실기시험 자료실/- 정보처리기능사

2011년 3월 27일 실기 기출문제 풀이

new올빼미 2011. 5. 26. 13:27
728x90
정보처리기능사 실기 문제 중에서 소수와 관련된 문제는 많이 출제가 되는 편입니다. 대부분은 나머지를 구하여 비교를 판단하는 k%j = 0와 mod(k,j)=0 그리고 k-(k/j)*k = 0 등을 사용하는 것이 었습니다. 
이번에 출제된 문제에서는 새로운 방식으로 소수를 판단하는 문제가 나왔습니다.

문제) 2 이상의 임의의 정수 N을 입력 받아 N까지의 소수의 합을 구하는 알고리즘입니다. 빈 칸에 맞는 답을 넣으세요.

합계 : SUM, 임의정수 : N, 정수형으로번환 : INT()

소수의 합을 구하는 이 순서도의 풀이 순서는 2부터 N까지의 정수를 앞의 숫자부터 선택을 하여 선택한 숫자가 소수인지 판단을 하기 위해 소수를 판단할 수 있는 가장 작은 수 2부터 선택한 숫자까지 1씩 증가하면서 나누어 떨어지는 가를 알아봅니다
선택한 수보다 작은 수로 나누어 떨어지면 소수가 아니고 선택한 수까지 증가를 하게 되면 선택한 수는 소수가 됩니다.
이렇게 나온 소수를 합하고 다시 선택 숫자를 1증가하여 위로 가서 선택수가 N이 될 때까지 반복을 하면 됩니다.



순서도를 위에서 부터 분석해 보겠습니다.
가장 먼저 소수의 범위가 될 N을 입력을 받습니다. 그리고 소수들을 합할 변수 SUM에 0으로 초기화를 합니다.
다음으로 해야 할 일은 소수를 판단하기 위해서 필요한 나누기할 수를 정해야 합니다. 우리는 소수를 판단하기 위해 2부터 N까지 1씩 증가를 할 것이기 때문에 나누기 할 수에 2를 먼저 초기화를 해야 합니다. ①번의 답 2 가 되는 것입니다.


다음으로 K를 나누면서 K가 소수인지를 판단 할 수를 정해야 합니다. 여기에서는 J를 2로 초기화를 해서 2부터 K까지 1씩 증가하며 K를 나누어 나머지가 있는지를 판단 할 것입니다.

다음으로 판단기호에서 INT(K/J) = 이라고 나와 있습니다. 처음에 언급 했듯이 나머지가 있는지를 판단하는 것들은 k%j = 0와 mod(k,j)=0 그리고 k-(k/j)*k = 0 가 있습니다. 그러나 이 문제에서는 이런 유형들과는 다르게 나누기를 하여 정수형으로 변환을 하고 있습니다. 이것은 몫을 구하는 것이기 때문에 0으로는 나머지가 있는지를 판단 할 수 없습니다.


이 문제에서는 나누기를 하여 몫을 구하고 정수형으로 바꾸어 소수를 잘라 버렸습니다. 여기에서 정수형으로 바꾸었다는 것은 나누기를 했을 때 소수부분까지 값이 나온다는 것을 의미합니다. 그렇다면 정수형으로 바꾸지 않고 나누기만 했을 때 나누어 떨어지지 않으면 소수부분까지 몫이 나온다는 의미 입니다.
다시 말하며 이 문제는 나누기를 하여 정수형을 한 것과 나누기를 하여 정수형을 하지 않은 값을 비교했을 때 소수부분이 똑같이 0 이어야 나누어 떨어진 것으로 판단을 한다는 것입니다.

②번의 답은  K/J가 되는 것입니다.


이 판단 기호에서 N를 만나게 되면 바로 아래의 J = 으로 가게 됩니다. 판단기호에서 몫이 다르게 나왔다는 것은 나누어 떨어지지 않았다는 이야기 이기때문에 J를 1증가 해서 다시 나누기를 해봐야 합니다. ④번의 답은 J + 1 이 됩니다.


K가 소수라면 J = J + 1은 J 가 K와 같은 수가 될 때 까지 증가를 하게 되어 있습니다.
그래서 K와 J가 같은 수가 되어 나누기를 했을 때 나눈 몫들도 같아지게 되어 이 판단 기호를 빠져 나오게 됩니다.


빠져나와서 가장 먼저 할 일은 K가 자기 자신과 같은 수보다 작은 수에서 나누어 떨어졌는지를 판단하는 것입니다. 만약 나누어 떨어졌으면 소수가 아니기 때문에 합계를 더할 필요가 없습니다. K= 이라는 판단기호에는 K와 J가 같은지를 물어서 소수인지를 여기에서 판단하게 되는 것입니다. ③번의 답은 J 가 됩니다.


다음의 처리기호에서는 소수의 합을 구하고 있습니다.
합을 구한 후 다음 수가 소수인지를 검사하러 다시 올라 가야 합니다.
이런식으로 N까지 반복해서 합을 구해야 하기 때문에 K가 N까지 증가하는지 확인해야 합니다. 합을 구한 다음의 판단기호에 있는 ⑤번의 답은 N 이 됩니다.


K가 N보다 작을 때 다시 위로 올라가는 흐름에서 빈 칸에는 K를 증가시키는 곳이 다른 곳이 없기 때문에 이곳에서 K를 증가 시키면 됩니다. ⑥번의 답은 K = K + 1 이 됩니다.


이상으로 새롭게 소수판단방법이 들어간 문제를 풀어 봤습니다. 다음 시험에 소수와 관련된 문제가 나온다면 k%j = 0 , mod(k,j)=0 , k-(k/j)*k = 0 , INT(K/J) = K/J 중 무엇인지 확인 하세요.


출처 : http://stepo.tistory.com/89

(stepo의 컴퓨터)