현재처음부터 현재페이지까지 독학하며 어려워도 디버깅을 보며 역으로 계산해서 이해해 왔는데
변수가 많아져서인지 플로차트가 복잡해보여서인지 아예 답안을 적지못하고있습니다
디버깅을봐도 이해가 잘안됩니다.
처음부터 끝까지 자세한 해설 듣고싶습니다.
하단의 디버깅부분의 A(i) 가 2~11사이의 정수를 입력받았다고 가정한 부분을 예시로
플로차트 및 디버깅 자세한설명 부탁드립니다.
안녕하세요 길벗수험서 운영팀입니다.
해당 소수 구하기 알고리즘에 대한 것은 교재 64쪽의 '알고리즘의 이해' 이상으로 설명드리기에는 어렵습니다.
만약 알고리즘의 이해 부분에서 이해되지 않는 것이 있다면, 어떤 부분에서 혼동이 오신 것인지 좀더 구체적으로 질문주세요.
다음 페이지의 순서도는 위에서 설명한 알고리즘을 그대로 구현하는 순서도입니다.
1~2 : 변수들을 초기화
3~5 : 배열에 값을 저장
6 : i, j를 0으로 설정
7 : 배열의 위치를 하나씩 증가시키면서
8 : 배열의 범위를 벗어나는 경우 종료하는 조건
10 : 소수인 경우 다시 알고리즘의 시작인 7로 이동
11 : 소수의 개수 증가
12~15 : 소수의 배수가 되는 수들을 0으로 처리하는 알고리즘
이렇게 되겠네요.
빈칸 1번은 단순 입력 구문입니다. k가 2부터 시작하니 a[k-1]에 2부터 차례대로니, a[k-1]=k가 되겠죠.
빈칸 2번은 11번을 통해 알 수 있습니다. J변수가 소수의 개수를 저장하는 변수인데, No일 때 +1을 합니다. 그렇다면 소수가 아닌 경우 위로 올라가야 합니다.
'알고리즘의 이해' 부분을 확인해보면 소수가 아닌 경우 0이 있다고 하였으니 a 배열에 0이 저장되어 있는지만 확인해 주면 되겠죠.
답은 a[i]=0이 됩니다.
12~15는 소수의 배수들을 0처리하는 알고리즘 입니다.
소수는 a[i]에 저장되어 있겠죠.
위의 알고리즘의 이해 부분을 다시 한 번 확인하세요.
a[1]=2가 소수이고 이 것의 배수들은
a[3]=4
a[5]=6
이렇게 저장되어 있을 것입니다.
13~15 반복은 14에서는 m을 기준으로 종료 조건을 설정하고 있고, 15에서는 a[m]=0이라고 하고 있으니 13에서는 m의 값을 변화시켜줘야합니다.
m의 값은 어떻게 증가하나요? a[i]의 값만큼 증가하고 있죠.
4번 빈칸은 m=m+a[i]가 됩니다.
그렇다면 3번 빈칸은 어떻게 될까요. a[1]=2에서 수행했다면, a[2]=3에서도 수행해야 할텐데, m이 초기화되어야 다시 반복할 수 있겠죠.
a[1]=2일때 1을 m이 갖고 있어야 하고, a[2]=3일때 2를 갖고 있어야 하니, m의 초기값은 i를 갖고 있어야 이후 '알고리즘의 이해'대로 수행이 될 것입니다.
좀 더 구체적인 답변을 원하시면 현재 얼마나 이해하셨고 어디서 막혔는지 말씀해주셔야 합니다.
대부분의 해설은 이미 교재에 모두 풀어내었기 때문에 특정 부분에 대한 자세한 설명이 아닌 전체적인 해설은 수험생들의 이해가 각각 달라 제공하기 어렵습니다.
행복한 하루되세요 :)
-
관리자2019-09-19 09:34:21
안녕하세요 길벗수험서 운영팀입니다.
해당 소수 구하기 알고리즘에 대한 것은 교재 64쪽의 '알고리즘의 이해' 이상으로 설명드리기에는 어렵습니다.
만약 알고리즘의 이해 부분에서 이해되지 않는 것이 있다면, 어떤 부분에서 혼동이 오신 것인지 좀더 구체적으로 질문주세요.
다음 페이지의 순서도는 위에서 설명한 알고리즘을 그대로 구현하는 순서도입니다.
1~2 : 변수들을 초기화
3~5 : 배열에 값을 저장
6 : i, j를 0으로 설정
7 : 배열의 위치를 하나씩 증가시키면서
8 : 배열의 범위를 벗어나는 경우 종료하는 조건
10 : 소수인 경우 다시 알고리즘의 시작인 7로 이동
11 : 소수의 개수 증가
12~15 : 소수의 배수가 되는 수들을 0으로 처리하는 알고리즘
이렇게 되겠네요.
빈칸 1번은 단순 입력 구문입니다. k가 2부터 시작하니 a[k-1]에 2부터 차례대로니, a[k-1]=k가 되겠죠.
빈칸 2번은 11번을 통해 알 수 있습니다. J변수가 소수의 개수를 저장하는 변수인데, No일 때 +1을 합니다. 그렇다면 소수가 아닌 경우 위로 올라가야 합니다.
'알고리즘의 이해' 부분을 확인해보면 소수가 아닌 경우 0이 있다고 하였으니 a 배열에 0이 저장되어 있는지만 확인해 주면 되겠죠.
답은 a[i]=0이 됩니다.
12~15는 소수의 배수들을 0처리하는 알고리즘 입니다.
소수는 a[i]에 저장되어 있겠죠.
위의 알고리즘의 이해 부분을 다시 한 번 확인하세요.
a[1]=2가 소수이고 이 것의 배수들은
a[3]=4
a[5]=6
이렇게 저장되어 있을 것입니다.
13~15 반복은 14에서는 m을 기준으로 종료 조건을 설정하고 있고, 15에서는 a[m]=0이라고 하고 있으니 13에서는 m의 값을 변화시켜줘야합니다.
m의 값은 어떻게 증가하나요? a[i]의 값만큼 증가하고 있죠.
4번 빈칸은 m=m+a[i]가 됩니다.
그렇다면 3번 빈칸은 어떻게 될까요. a[1]=2에서 수행했다면, a[2]=3에서도 수행해야 할텐데, m이 초기화되어야 다시 반복할 수 있겠죠.
a[1]=2일때 1을 m이 갖고 있어야 하고, a[2]=3일때 2를 갖고 있어야 하니, m의 초기값은 i를 갖고 있어야 이후 '알고리즘의 이해'대로 수행이 될 것입니다.
좀 더 구체적인 답변을 원하시면 현재 얼마나 이해하셨고 어디서 막혔는지 말씀해주셔야 합니다.
대부분의 해설은 이미 교재에 모두 풀어내었기 때문에 특정 부분에 대한 자세한 설명이 아닌 전체적인 해설은 수험생들의 이해가 각각 달라 제공하기 어렵습니다.
행복한 하루되세요 :)