CodeWars 일백 열 아홉 번째 문제

Updated:

Calculate String Rotation

static int shiftedDiff(String first, String second) {
    int maxRatation = first.length();

    for(int i = 0; i < maxRatation; i++) {

        if(second.equals(first)) {
            return i;
        }

        first = first.substring(maxRatation - 1) + first.substring(0, maxRatation - 1);
    }

    return -1;
}
  • 문제는 쉬운 문제였다.
  • 그러나 조금만 간단히 생각해보면 Best 코드처럼 쉽게 풀 수 있는 문제이다.
  • rotation해서 나올 문자를 이어 붙이면 그 안에 원래 문제가 있을 것이다.
  • 거기의 위치를 뽑아내면 그것이 rotation한 횟수이다.
  • 예를 들어서 coffee를 rotation해서 eecoff를 만드는 횟수를 만들고 싶다.
  • 그러면 eecoff + eecoff 이렇게 붙인다.
  • 그러면 ee(coffee)coff 문자열 사이에 괄호에 보이듯이 coffee가 보인다. 이때 coffee는 두 번째로 시작하기 때문에 2번 rotation 했다.
static int shiftedDiff(String first, String second){
    if (first.length() != second.length())
            return -1;
    return (second + second).indexOf(first);
  }