jisqus   3년 전

while( st.top() == arr[j] && !st.empty())  //처음에 이렇게 했더니 런타임 에러가 나더라고요...

그래서 

while(!st.empty() && st.top() == arr[j]) // 이렇게 순서를 바꿨더니 해결이 되긴했는데... 왜 이건 되고 저건 안되는건지 이해가 가질 않습니다 ㅜㅜ

신기한건 if문으로 위에 조건 그대로 넣고 돌렸더니 잘 돌아갑니다... 정말 신기하네요...

도와주십쇼 고수님들!!

eric00513   3년 전

if문 앞에서부터 처리가 됩니다. while( st.top() == arr[j] && !st.empty()) 에서는 만약 st가 비어있다면, st.top() == arr[j] 조을 먼저 확인하기 때문에 런타임 에러가 발생합니다. 하지만, while(!st.empty() && st.top() == arr[j])에서는 비어있는지를 먼저 확인하기 때문에 괜찮습니다.

limnoung   3년 전

조건에서 말씀해주신대로 첫번째 경우처럼 진행했을 경우에 

스택이 비어있을 경우에 top() 을 호출하게 되면 NULL 값이 반환되면서 Exception이 생길건데

두번째 경우처럼 진행했을 경우에는 스택이 비어있지 않은 경우를 미리 처리해주면서


Exception이 생기지 않아 보이는 것 같네요!

eric00513   3년 전

위 if문을 "조건문"으로 정정합니다.

저 if문이 가능한 것은 신기하네요

jisqus   3년 전

도움 감사합니다! 

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