문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A
를 밀어서 B
가 될 수 있다면 몇 번 밀어야 하는지 횟수를 return하고 밀어서 B
가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
A
의 길이 = B
의 길이 < 100A
, B
는 알파벳 소문자로 이루어져 있습니다.unshift()
: 배열에 새로운 요소를 추가하는 함수,push()
와는 다르게 맨 앞에 요소를 새롭게 추가한다. const nums = [4,5,6];
nums.unshift(1,2,3); // 배열 맨 앞에 1,2,3 을 추가한다.
console.log(nums); // [1,2,3,4,5,6]
nums.push(7,8,9); // 배열 맨 뒤에 7,8,9 를 추가한다.
console.log(nums); // [1,2,3,4,5,6,7,8,9]
splice()
: 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다. 원본 배열이 변경되지 않는 slice()
와는 달리 splice()
는 원본 배열에 변경이 생긴다는 점을 기억하자! const nums = [-4, -1, 0, 3, 10];
// 배열의 0번째부터 2번째까지를 잘라서 반환한다.
let numsSlice = num.slice(0,3);
console.log(numsSlice); // [-4, -1, 0]
console.log(nums); // [-4, -1, 0, 3, 10]
// 배열에서 마지막 3개의 요소를 반환한다.
let numsSplice = nums.splice(-3);
console.log(numsScplie); // [0, 3, 10]
console.log(nums); // [-4, -1]
function solution(A, B) {
// 1. 처음부터 A와 B가 같다면 문자열을 한 번도 밀지 않은 경우이므로 0을 반환한다.
if(A===B) return 0;
let total = 0;
let arr = A.split("");
for (let i = arr.length-1; i >= 0; i-- ){
// 2. A의 마지막 문자를 잘라서 tmp에 넣는다.
let tmp = arr.splice(arr.length-1, 1)[0]
// 3. tmp를 arr의 맨 앞쪽에 추가한다. (unshift() 사용)
arr.unshift(tmp);
// 4. 문자열을 한 번 밀었으므로 total 값을 증가시킨다.
total++
// 5. 문자열을 민 값이 B와 일치한다면 민 횟수(total)를 반환한다.
if(arr.join("") === B) return total;
}
return -1;
}
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/push
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice