안녕하세요? 김동현 회원님
정보처리 자격시험 온라인 강의, 최강! 기사친구 입니다.
회원님 질문에 답변 드리겠습니다.
회원님 이 제시하신 답이 정답이 될 수 없는 이유를 한 가지 반례를 들어 설명하겠습니다.
한가지 반례로 배열의 크기를 (5, 5) 로 받고, 다음 19를 배열에 넣는 상태라고 가정하겠습니다.
1 2 4 7 11 3 5 8 12 16 6 9 13 17 10 14 18 15
이제 회원님이 제시한 답대로 알고리즘을 디버깅 해보겠습니다.
이 상태에서는 우선 R 값에 5를 할당하고, C값에 2를 할당한 뒤
C >=1 AND C <= N 분기문에 들어가게 됩니다.
조건을 만족하기 때문에 yes로 분기하고, 변수 i 에 19, A( 5, 2 )에 19를 할당할 것입니다.
그 다음 회원님이 말씀하신 답으로 R < R *C 분기문에 들어 갈 것입니다.
그런데 R 값은 5이고 C 값은 2이기 때문에 분기문에서 yes( 5 < 5*2 ) 로 분기 합니다.
원래 yes로 분기되면 안되는데 말이죠?
왜냐하면 yes로 분기하면 다시 반복하여 R에는 1증가한 6이, C에는 1 이 저장 될 것이고, C >=1 AND C <= N 분기문에 들어가 yes 로 분기하게 되는데,
이때 i 는 20이 할당되고 배열에 값을 넣을때 배열의 위치는 A( 6, 1)이 될 것이기 때문입니다.
다시말해 정의되지 않은 위치입니다.
따라서 정의되지 않은 위치에 할당할때 발생하는 null point exception 이라는 에러가 생깁니다.
따라서 회원님이 제시한 답은 정답이 될 수 없습니다.
이해되셨나요? ^^
열공하시구요..
지금과 같은 디버깅을 통해 오류를 찾는 접근법은 매우 훌륭합니다.
그러니 조금만 더 노력하여 꼭 합격하시기 바라겠습니다.^^
문제 풀다가 헛갈려서 질문 드립니다.
이 문제에서 정답이 네번째는 20번(N)이라고 나와있거든요. 저도 N이 되는 이유는
이해가 가긴하는데
13번 (R*C) 로 처음에 선택했었거든요.
디버깅 계속해보니깐 이것도 되는 것 같은데
안되는 이유 좀 가르쳐 주십시오 ㅠ.ㅠ
항상 수고하십니다!
|