00osos   4년 전

문제의 입/출력 예시에서, ddz=z=를 입력하면 결과값으로 3이 나온다고 했는데  크로아티아 알파벳이 'dz=','z='로 유사한게 있는데, 이게 제 코드해서는 결과값이 4가 나오네요 ㅜ

제 코드 문제가 아니라고 해도 'ddz=z='는 (d/d/z=/z=)와 (d/dz=/z=)이렇게 방법이 2가지고 나눠지지 않나요?

일부로 혼자 풀어보고 싶어서 2시간동안 끙끙되면서 혼자 짠 코드인데 오류 부분이 있다면 알려주심 감사하겠습니다.!!

// 제 코드를 설명하자면, 크로아티아 알파펫이 나오면 개수를 세고, 그 후에 크로아티아 알파벳을 문자열에서 지웁니다. 그 후에는 남은 알파벳의 개수 + 지운 만큼의 크로아티아 알파벳 을 해줍니다.

evenharder   4년 전

'dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다.'라는 조건이 있기 때문에 dz=은 d/z= 로 분리할 수 없습니다.

예시로 문자열 dz=dz=를 생각해보면, 답은 2입니다 (dz=/dz=).

그러나 지금 코드는 a[x]가 dz=일 때 cnt에 2를 더하고, z=일 때 또 2를 더합니다.

잘 생각해보시면 k에서 z=를 확인할 때, dz=가 있는 개수만큼 더 세는 걸 알 수 있습니다.

evenharder   4년 전

그 부분을 고치신다해도 알고리즘은 여전히 틀립니다. j에서 문자열을 지우면서, 기존에 없던 크로아티아 알파벳이 만들어질 수 있기 때문입니다.

예시로 ljldz=j의 문자열을 고려해보면 우선 답이 4 (lj/l/dz=/j)임을 알 수 있습니다.

그러나 dz=가 먼저 제거되면서 ljlj가 만들어지고, 답이 3으로 나오게 됩니다. 고치면 값이 더 작아지므로 역시 문제입니다.


문제는...제가 첫 번째 댓글에서 지적했던 부분을 고치면 맞았습니다가 나옵니다. 이런 테스트 케이스가 없던 것 같습니다.

그러므로 이 테스트 케이스를 추가해주시면 감사하겠습니다. @startlink

evenharder   4년 전

그럼 어떻게 해야 하나요...라는 질문에는, 문자열을 한 글자씩 늘려가면서 문자열의 맨 끝에 크로아티아 알파벳이 등장하면 이를 체크하고 그 다음 문자부터 읽어나가면 됩니다.

00osos   4년 전

감사합니다!

크로아티아 알파벳중 2개 이상의 문자가 중복되는게 dz=와 z=밖에 없어서 dz=를 먼저 리딩후 replace로 '/'를 사용하여 ddz=z=에서 dz=로 빠져나가도 d/z=처럼 나오게 했습니다.

다소 다른 방법보단 복잡할수는 있었겠지만 그래도 풀려져서 다행이에요. 다시한번 감사합니다!

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