17년도 정보처리기사 필기 교재에 1권 197쪽 9번 문제에 대한 문의입니다.
이미지도 같이 첨부합니다.
처음에 이론으로 공부할 때는 ㄱ. Top=0일 때 null로 만든다는 이런 내용이 없었어서 문의드립니다.
스택포인터 Top이 0인 것과 널인 것이 다른 의미인가요?
그리고 본래 이론으로 공부할 때는 스택에서 pop을 할 때 젤 먼저 스택 포인터가 0인지를 확인해서 맞으면 underflow를 처리하는 걸로 배웠습니다.
따라서 제가 이 문제를 풀 때는 ㄱ Top이 0일 때 널으로 만드는 것이 젤 먼저 와야 한다고 생각했습니다. 그래야 0일 때 널로 만들어서 널인지 확인해서 underflow를 처리할 수 있다 생각했습니다.
그런데 보니까 답이 1번 ㄷ-ㄴ-ㄹ-ㄱ이더라구요.
ㄷ이 순서로 젤 먼저 올 수 있다면 굳이 ㄱ이 필요없는 거 아닐까해서 문의드립니다.
안녕하세요 길벗수험서 운영팀입니다.
해당 문제는 한 과정이 추가된 것에 지나지 않습니다.
0인 경우 스택이 비어있음을 알기 위해 포인터(TOP)에 NULL을 저장한 것이죠.
말씀하신대로 굳이 ㄱ을 쓰지 않을 수는 있으나 이 경우 ㄷ을 수정해야 합니다.
if TOP=0 Then Underflow Go Exit; 로 말이죠.
순서대로 말로 풀어보죠.
제거(Deletion) 요청이 들어오면
1. 먼저 포인터(TOP)이 널인지 파악하여, 널이면 Underflow와 함께 종료됩니다.
2. 스택에서 포인터 위치의 값을 삭제합니다.
3. 포인터의 값을 1 감소시킵니다.
4. 포인터가 0이면 NULL값을 저장합니다.
여기서 만약 단순하게 ㄱ(위의 4)이 삭제된다면 포인터는 널값을 저장하는 경우가 존재하지 않아 스택은 언더플로우가 발생하지 않을테고, 이는 스택의 범위를 벗어난 위치를 조회하여 프로그램에 오류가 발생하게 됩니다.
행복한 하루되세요 :)
-
관리자2020-02-27 10:18:15
안녕하세요 길벗수험서 운영팀입니다.
해당 문제는 한 과정이 추가된 것에 지나지 않습니다.
0인 경우 스택이 비어있음을 알기 위해 포인터(TOP)에 NULL을 저장한 것이죠.
말씀하신대로 굳이 ㄱ을 쓰지 않을 수는 있으나 이 경우 ㄷ을 수정해야 합니다.
if TOP=0 Then Underflow Go Exit; 로 말이죠.
순서대로 말로 풀어보죠.
제거(Deletion) 요청이 들어오면
1. 먼저 포인터(TOP)이 널인지 파악하여, 널이면 Underflow와 함께 종료됩니다.
2. 스택에서 포인터 위치의 값을 삭제합니다.
3. 포인터의 값을 1 감소시킵니다.
4. 포인터가 0이면 NULL값을 저장합니다.
여기서 만약 단순하게 ㄱ(위의 4)이 삭제된다면 포인터는 널값을 저장하는 경우가 존재하지 않아 스택은 언더플로우가 발생하지 않을테고, 이는 스택의 범위를 벗어난 위치를 조회하여 프로그램에 오류가 발생하게 됩니다.
행복한 하루되세요 :)