인프런 커뮤니티 질문&답변

moveityourself01님의 프로필 이미지
moveityourself01

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-N

어디서 오류가 발생하는 건지 모르겠습니다.

작성

·

130

0

http://boj.kr/be195db38890481b9ca7ef38e786651e

 

선생님의 코드와 다른 부분은 스택을 매번 재선언하지 않고 재활용 할 수 있게 비워둔다는 점 뿐인 것 같습니다.

 

gcc로 컴파일 했을 때, 2회 이상의 입력에서 2회차 반복 시에 아무런 출력도 하지 않고 그대로 프로그램이 강제 종료됩니다. 백준에는 런타임 에러라고 뜨는데,

 

입력과 관련된 문제일까요? 아니면 스택을 재선언 하지 않고 매번 비워두는 코드에서 런타임 에러가 발생한 것일까요..?

 

조언이 필요합니다. 감사합니다.

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 01님 ㅎㅎ

이렇게 한번 바꿔보시겠어요?

            else if(input[i] == ')')
            {
                if(stk.size() && stk.top() == '(') stk.pop();

stk.top()이라는 것은 스택의 가장 앞부분을 참조하는 것을 말합니다.

이 때는 방어코드가 드가야 합니다.

스택의 앞부분을 참조할때 ~ 아 정말 스택에 어떤 것이 담겨있나? 라고 확인하는 stk.size() 체크하는 게 들어가야 합니다.

이 방어코드가 없다면 스택에 아무것도 없는데 top()을 참조하게 되서 에러가 발생할 수도 있게 되는 것이죠.

 

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

moveityourself01님의 프로필 이미지
moveityourself01

작성한 질문수

질문하기