문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
A와 B가 처음부터 같은 경우에는 바로 0을 return 한다.
A와 B가 같지 않은 경우, pop과 unshift를 이용해 맨 마지막 요소를 빼서 맨 앞에 넣는 행위를 반복한다.
(이때 반복문은 배열의 크기만큼만 실행한다. 배열 크기만큼 다 돌면 본래대로 돌아오므로 그 이상 할 필요가 없기 때문이다.)
위의 과정을 반복하며 A와 B가 같아지면 실행 횟수i
를 return, 다르면 반복문을 계속 진행한다.
반복문이 다 끝난 후에도 값이 정해지지 않으면(아무리 밀어도 같아지지 않는 경우) -1을 return 한다.
function solution(A, B) {
let a = A.split('');
// 처음부터 같은 경우
if(A == B) return 0;
// 같지 않은 경우 같아질 때까지 미는 과정 반복. 같아지면 실행 횟수 return.
for(i=0;i<=a.length;i++){
if(a.join('') !== B){
a.unshift(a.pop());
}else{
return i;
}
}
// 밀어도 같아지지 않는 경우
return -1;
}
pop() : 배열의 맨 뒤 요소를 제거함
unshift() : 배열의 맨 앞에 요소를 넣음
B를 이어붙여서 찾은 A의 index가 밀어야 하는 최소 횟수와 같다.
hello
hell" -> 1function solution(A, B) {
return (B+B).indexOf(A);
}