djm03178   5년 전

가장 중요한 것은 문제를 꼼꼼히 읽는 것입니다. 문제에서 요구하는 것을 하나도 빠짐없이 전부 구현했는지 확인하세요.

다음은 이 문제에 대해 가장 자주 보이는 질문 유형들입니다.

0. "★ ★ ★ ★ ★ top ★ ★ ★ ★ ★  : 스택의 가장 위에 있는 정수를 출력한다.  만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. " 이제는 예제에 이런 케이스가 추가되었으니 이걸로 고생하시는 분은 없겠지만, 평소에도 예제에 의존하지 말고 다양한 입력을 직접 넣어보는 습관을 들입시다.

  1. 주어지는 명령의 수는 최대 10000개입니다. 그러면 스택의 크기를 임의로 10이나 100, 또는 999 정도로 잡으면 안 되겠죠? 10000개의 push 명령이 들어와도 감당할 수 있어야 하니까요.
  2. ★모든★ 출력에 대해 개행 문자를 출력했는지 확인하세요. pop해서 나온 수를 출력하거나, size를 출력하거나, empty에 대한 답을 출력하거나, top해서 나온 수를 출력하거나, 또한 -1을 출력하는 경우에도 개행 문자를 반드시 출력해야 합니다.
  3. pop이나 top을 하기 ★전에★ 인덱스를 벗어나지 않는지 반드시 검사하세요. 배열의 -1번째 원소에 접근하는 것 자체가 위험한 행동이고, Java나 Python 등에서는 그 즉시 무조건 런타임 에러입니다. 라이브러리를 쓰는 경우에도 마찬가지입니다. C++에서도 vector에 [-1]이나 back()을 하거나 stack::top(), stack::pop()을 먼저 호출하면 안 됩니다.
  4. C, C++의 경우 char형 배열에 명령어를 입력받는다면, 그 크기는 반드시 ★6★ 이상이어야 합니다. empty가 5글자니 5개면 충분하지 않냐고요? 문자열은 항상 마지막에 널 문자를 위한 공간이 하나 더 필요합니다.
  5. 입력되는 정수는 한자릿수라는 보장이 없습니다. 최대 100000까지의 정수가 들어옵니다. 한 글자 입력받는 함수로 수를 입력받거나 앞 글자 하나만 처리하면 절대로 안 됩니다. 이런 예제도 추가되었으니 이제 이걸로 고생하시는 분은 없겠지만, 2번 예제가 없다고 생각했을 때에도 이런 걸로 틀렸다고 곧바로 질문을 올려서는 실력이 늘 수 없습니다.

seongkwonii   5년 전

감사합니다.^^

쓰신 것 중에 top을 배열 인덱스 예외 처리를 안해줬네요.

phcdream   4년 전

https://pang2h.tistory.com/172

로컬에서 경고인게, 런타임 에러가 뜨기도 하네요.

 링크의 내용은,

  • 위 코드를 작성하고 컴파일을 진행하면 아래와 같은 경고가 발생합니다. 컴파일러 경고 수준에 따라 경고가 오류로 발생할 수도 있습니다.
  •  말 그대로 변수를 초기화 하기 전에 해당 변수를 사용해 발생하는 문제입니다.
  •  변수를 처음 만들게 되면 기존 메모리에 들어있는 값을 그대로 사용하게 되기 때문에 어떤 값이 들어있는지 알 수 없습니다. 그래서 예외 발생의 가능성이 있죠.

intshc   2년 전

감히 실딱이가 댓글달지만 empty 5글자가 배열 0부터 들어가니까 4까지 입력되서 상관없지 않나요,,?

djm03178   2년 전

empty 글자 자체는 0부터 4까지 들어가지만, 언급한 것처럼 뒤에 널 문자를 위한 공간이 하나 더 필요합니다. 그래야 "문자열"이 됩니다.

댓글을 작성하려면 로그인해야 합니다.