문제 설명
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < A의 길이 = B의 길이 < 100
- A, B는 알파벳 소문자로 이루어져 있습니다.
풀이
음.. 원래대로라면 문자열을 배열로 바꿔서 이렇게 저렇게 하겠지만.. 이번엔 문자열 매서드를 이용해보자.
대략적으로 머릿속으로 먼저 구상해보면..
A를 오른쪽으로 한칸씩 밀면서 B랑 같아질때 까지 비교해보는데,
이때 move변수를 하나 만들어서 하나씩 올려준다.
이때 move가 A 문자열의 길이와 같아지면 (다시 처음으로 돌아오면)
오른쪽 이동으로는 만들 수 없는 문자열이라고 판단 되므로
반복을 종료해준다.
이후 A와 B가 같으면 move를 리턴, 같지 않을 경우 -1을 리턴해주고,
맨 처음에 A랑 B가 같으면 0을 바로 리턴해주면 될꺼같다.
const solution = (A, B) => {
if(A === B) return 0;
let move = 0;
while(A !== B){
A = A.at(-1) + A.substring(0, A.length - 1);
move ++;
if(move === A.length) break;
}
return A === B ? move : -1;
}