thanatos0128   6년 전

예제는 잘 출력이 되는데 어떤 부분에서 틀렸는지 30 몇 퍼센트에서 틀렸다고 합니다.

제가 작성한 풀이는 스택을 2개 이용하는 방법입니다.

첫 줄에 입력받은 문자열을 string에 저장하고, 문자의 수 만큼 반복을 수행합니다.

각 라운드마다 스택 top과 폭탄 문자열의 역순으로 비교하여

같은 경우에는 pop을 해서 임시스택에 저장을 해놓습니다.

다른 경우에는 다음 라운드를 실행하고, 임시스택에 저장된 내용들을 다시 스택에 저장합니다.

그리고 비교하는 작업을 통해 폭탄 문자가 모두 스택의 top에 있다는 것을 확인하면 임시 스택을 비웁니다.


이런식으로 작성을 했는데 어디서 문제가 있는지를 모르겠습니다...

고수님들 도와주세요...ㅠ

thanatos0128   6년 전

자체 해결했습니다.

저 코드의 반례를 가지고 설명하겠습니다.

입력

abdc

abc

출력

abd

정답

abdc

출력을 보시면 맨 마지막에 'c'가 빠져 있는 것을 확인할 수 있습니다. 이 'c'가 왜 빠져있냐?

문제는 13번째 줄 루프에 있었습니다.

한 글자씩 스택에 넣어가면서 스택의 top이 bomb의 마지막 문자와 같으면 임시스택에 스택 top을 저장해 놓습니다.

스택

a b d c

임시스택

c

이런식으로 말입니다.

다음은 bomb문자 'b'와 스택의 top에 있는 'd'를 비교를 하게 됩니다. 결과는 당연히 false가 나오므로, 13번째 루프를 진행하게 됩니다.

하지만 방금 진행한 라운드가 마지막이기에 루프는 종료가 됩니다.

그렇게 되면 현재 스택에는 'c'가 pop이 된 상황이므로 그대로 출력을 하게 되면, 'abd'가 되어버리는 것입니다.

그래서, 루프를 종료하게 되면 임시스택에 데이터가 있는지를 확인하여 스택에 추가를 해주므로 문제를 해결했습니다.

thanatos0128   6년 전

보기 좋으라고 html로 테이블 넣었는데... 잘 안들어갔네요...

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