dlwocks31   5년 전

https://www.acmicpc.net/source...

처음에는 위 링크와 같은 코드로, (입력 파트 끝부분에 있는)1,2,4번 조건은 44줄 위에서 체크하고, 3번 조건은 44줄 밑에서 각 문자에 대해 그 앞과 뒤에서 나타날 수 있는 문자 외의 문자가 나타나는지를 일일히 체크했는데 일단 여기서 결과는 틀렸습니다 가 나옵니다.
여기서 64번째 줄을 uncomment하면 맞았습니다! 가 뜨는데, 64줄에서는 첫 문자가 L,S,B가 아니면 -1을 출력하기 때문에 이는 원 코드에서 틀리게 출력되는 테케의 첫 문자가 L,S,B중 하나가 아니여야만 나타날 수 있는 현상이라 생각하고 있는데..
1.첫 문자에 "([",")]",","이 나타나는 것을 각각 48,51,54줄에서 확인해주고 있다고 생각해서 이상하다 느꼈고
2.원 코드에서 65줄의 assert문을 uncomment했을때(링크 3) 런타임 에러 대신 틀렸습니다 가 떠 원 코드에서 틀리게 출력하는 테케의 첫 글자는 확실히 "[]()," 중 하나가 아니라는 결과가 나오는데, 44줄 위에서 걸러낸 결과로 str은 "LSB"+"[]()," 로 이루어져 있어야 하기 때문에 이는 모순된 결과입니다..?


음 결론은 왜 맞았는지 모르겟습니다 어디서부터 잘못된 것일까요...ㅠㅠ

djm03178   5년 전

문제가 사악하네요.

"The string P consists of uppercase alphabets and punctuation symbols."

이 이외에 대문자가 어떤 것들이 들어올 수 있는지에 대한 제약이 전혀 없습니다. 즉, A부터 Z까지의 어떤 대문자도 입력으로 들어올 수 있습니다. 이런 것들을 전부 에러로 판단해줘야 합니다.

dlwocks31   5년 전

@djm03178

다른 대문자 또는 다른 문장기호가 들어오는 케이스는 25-43줄에서 돌리는 첫 루프에서,  정확히는 40+41줄에서 처리를 해 주고 있어요!

djm03178   5년 전

제가 입력을 잘못 줬었네요. 아무튼 찾아냈습니다.

입력에 빈 문자열이 있네요.

djm03178   5년 전

공백 같은 건 있을지도 모릅니다.

dlwocks31   5년 전

@djm03178

와 정말이네요... 상상도 못했어요...ㅋㅋㅋㅋ정말 감사드립니다

dlwocks31   5년 전

항상 가장 작은 인풋 케이스를 검사하라는 교훈을 한번 더 얻고 갑니다..

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