안녕하세요? 윤기옥 회원님
정보처리 자격시험 온라인 강의, 최강! 기사친구 입니다.
회원님 질문에 답변 드리겠습니다.
첫번째 3번 답이 C <= N 이 되는 이유는 있지도 않은 배열 공간에 숫자를 저장하기 때문이
맞습니다. 이것을 전문용어로 Null Point Exception 이라고 합니다.
그런데 4번에는 회원님께서 말씀하신 N보다 큰값이 들어가면 안됩니다.
그 이유는 다음과 같은 한 가지 반례를 들 수 있습니다.
한가지 반례로 배열의 크기를 (5, 5) 로 받고, 다음 19를 배열에 넣는 상태라고 가정하겠습니다.
1 2 4 7 11 3 5 8 12 16 6 9 13 17 10 14 18 15
이제 회원님이 제시한 답, 예를 들어 4번에 R < 7 이라고 해보겠습니다.
이 상태에서는 우선 R 값에 5( R = R + 1)를 할당하고, C값에 2( C = K - R )를 할당한 뒤
C >=1 AND C <= N 분기문에 들어가게 됩니다.
조건을 만족하기 때문에 yes로 분기하고, 변수 i 에 19, A( 5, 2 )에 19를 할당할 것입니다.
그 다음 회원님이 말씀하신 답으로 R < 7 분기문에 들어 갈 것입니다.
그런데 R 값은 5이기 때문에 yes로 분기됩니다.
원래 yes로 분기되면 안되는데 말이죠?
왜냐하면 yes로 분기하면 다시 반복하여 R에는 1증가한 6이, C에는 1 이 저장 될 것이고, C >=1 AND C <= N 분기문에 들어가 yes 로 분기하게 되는데,
이때 i 는 20이 할당되고 배열에 값을 넣을때 배열의 위치는 A( 6, 1)이 될 것이기 때문입니다.
다시말해 정의되지 않은 위치입니다.
따라서 정의되지 않은 위치에 할당할때 발생하는 null point exception 이라는 에러가 생깁니다.
따라서 회원님이 제시한 답은 정답이 될 수 없습니다.
이해되셨나요? ^^
열공하시구요..
디버깅을 통해 오류를 찾는 접근법은 매우 중요합니다.
연습하셔서 꼭 합격하시기 바라겠습니다.^^
다른 답은 무난하게 구했는데
3,4 번이 잘안나오더라구요.
3번은 디버깅해보니까 c<=N을 안잡아 넣으면 있지도않은 배열공간에 숫자를집어넣더라구요
근데 4번은 N 보다 큰값이면 돌아가기는 다돌아가는것 같더라구요. 헛바퀴도는게많지만..
예를들어 N이 3이라고한다면
어짜피 후증가니깐 R 값은 3보다 작다라고두어서 , 그냥 기본에충실한 최적화 알고리즘인가요? |