khs940102   2년 전

7%에서 런타임 에러가 발생하는데 어떤 문제때문일까요?

djm03178   2년 전

[]]

khs940102   2년 전

조건을 추가하여 실행시켰더니 41%에서 틀렸습니다라고 나옵니다. 반례들을 검색하여 돌려보는데 다 통과인데 어떤 반례가 있을까요?

djm03178   2년 전

([)])

khs940102   2년 전

매번 답해주셔서 감사합니다.

아래와같이 수정하여 위의 반례는 수정하였으나 같은 곳에서 에러가 발생하네요..

djm03178   2년 전

한 번에 모든 걸 처리하기 까다롭다면, "올바르지 않은 괄호 문자열"을 먼저 걸러낸 후 계산을 편하게 하는 방법도 있습니다.

([[])])

khs940102   2년 전

몇가지 걸러내는 조건을 추가하였습니다.

혹시 이것 외에도 걸러내는 조건이 있을까요?

djm03178   2년 전

정말 케이스를 많이 돌려서 찾았습니다.

()[[()]()()]()

khs940102   2년 전

이 부분도 수정하였는데 같은 부분에서 틀렸다고 나오네요.

도저히 모르겠습니다..ㅠㅠ

djm03178   2년 전

해결이 되시면 꼭 다른 사람들 소스를 읽고 얼마나 간단하게 짤 수 있는지 공부해보시면 좋을 것 같습니다.

djm03178   2년 전

몇 가지 힌트를 드리자면,

  1. '올바르지 않은 괄호 문자열'을 미리 걸러낸다는 말은 단순히 각 괄호의 개수만 미리 세보는 것을 넘어, 83, 84번째 줄을 비롯해서 check라는 변수 자체가 필요하지 않게 만드는 것을 말합니다. 즉, 괄호의 값이 뭔지는 상관하지 말고 오로지 짝이 맞는지만을 미리 검사해서 0을 출력해야 하는 경우를 전부 거르고, 올바른 괄호 문자열이라면 값을 계산하는 과정에 있어 예외 처리를 전혀 할 필요가 없게 만들어 계산 과정을 편하게 하자는 것입니다.
  2. 지금 코드가 복잡해진 이유 중 하나는 '괄호 문자'와 '값'이라는 서로 연관성이 없는 두 카테고리를 하나의 스택에 넣어서 처리하려고 하기 때문입니다. 그래서 '스택'임에도 불구하고 top 원소 뿐만 아니라 top보다 아래에 있는 원소까지 간섭해서 봐야 하는, 어떻게 보면 스택의 의미를 상실하는 행동을 취해야 됩니다. 굳이 둘을 번갈아가면서 쌓은 것'으로 볼 필요가 있을까요? 현재 괄호의 스택 상태와, 각 괄호에 해당하는 값이 얼마인지를 따로 저장한다면 계산이 훨씬 편리하지 않을까요? 또는, '각 괄호와 그에 해당하는 값'을 묶어서 원소 하나로 취급한다면, 굳이 여러 번 push pop 할 필요 없이 한 번에 처리가 가능하지 않을까요?

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