저도 많이 미숙합니다만. 올려주신 코드를 한 번 검토해본 결과, 몇몇 테스트 케이스에서 맞지 않는 결과를 내놓는 걸 확인했습니다.
예를 들어 테스트 케이스로 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년 전
A B C를 같은 위치에 있다고 생각하고 인덱스를 0 0 0 으로
나머지도 마찬가지로 설정해주고
이전에 같은 인덱스가 눌렷으면 W를 더해주는 식으로 구현하였습니다.
테스트 케이스는 맞는데 뭐가틀렸는지 모르겠습니다.
코드한번 기똥차게 봐주실분 구합니다.