minjae200   5년 전

A B C를 같은 위치에 있다고 생각하고 인덱스를 0 0 0 으로

나머지도 마찬가지로 설정해주고

이전에 같은 인덱스가 눌렷으면 W를 더해주는 식으로 구현하였습니다.

테스트 케이스는 맞는데 뭐가틀렸는지 모르겠습니다.

코드한번 기똥차게 봐주실분 구합니다.

gallopsys   5년 전

저도 많이 미숙합니다만. 올려주신 코드를 한 번 검토해본 결과, 몇몇 테스트 케이스에서 맞지 않는 결과를 내놓는 걸 확인했습니다.

예를 들어 테스트 케이스로 p = 1, w = 2, str = "BB"가 주어지면 답으로 6을 제출하여야 합니다.

왜냐하면 첫 번째 B를 누를 때 걸리는 시간은 2초 (p×2)고,두 번째 B를 누를 때 걸리는 시간은 이전에 B를 누른 기록 때문에 지연 시간 2초 (w) + B를 누를 때 걸리는 시간인 2초 (p×2)...

이를 합산하면 6초가 나오게 됩니다. 하지만 주신 코드 상으로는 8초를 제출하여 잘못된 결과를 반환하고 있음을 알 수 있지요.

추측컨데 논리적 오류가 발생하는 부분은 32번째 줄을 제외한 31~35번 줄이라고 생각합니다. 한 번 아래와 같이 코드를 고쳐보시고 제출해보시면 어떨까 싶습니다.

31번째 줄: int prevIndex = idx[str[0] - 'A'];                -> int prevIndex = -1;

32번째 줄: int ans = 0;                                             -> 변동 없음

33번째 줄: ans += alpha[idx[0] - 'A'];                         -> 삭제

34번째 줄: if (str[0] - 'A' - prevIndex != 0) ans += W;  -> 삭제

35번째 줄: for (int i = 1; i < len; i++)                         -> for (int i = 0; i < len; i++)

무슨 사유에서 그렇게 계산하셨는진 모르겠으나, 제가 위에서 말씀하신 내용들은 불필요한 연산 부분이라고 여겨집니다. 한 번 참고해보시고, 도움이 되셨으면 좋겠네요 :)

minjae200   5년 전

@gallopsys


친절한 설명감사합니다.



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