문제 설명
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열A
와B
가 매개변수로 주어질 때,A
를 밀어서B
가 될 수 있다면 몇 번 밀어야 하는지 횟수를 return하고 밀어서B
가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < A의 길이 = B의 길이 < 100
- A, B는 알파벳 소문자로 이루어져 있습니다.
입출력 예 설명
내가 생각한 알고리즘은 다음과 같다.
문자열 A를 한 글자씩 분리하여 배열로 만든다.
배열 A의 마지막 요소를 맨 앞으로 당겨온다.
배열 A를 문자열로 합친 뒤 B와 비교한다.
A와 B가 같다면 반복횟수 반환, B가 될 수 없다면 -1을 반환한다.
function solution(A, B) {
let answer = 0;
let AList = A.split(""); // A를 배열로 만들어주기
const BList = B.split(""); // B를 배열로 만들어주기
// 문자열 길이만큼 반복
for (let i = 0; i < AList.length; i++) {
if (AList.join() == BList.join()) { // A 와 B 가 같다면 반복횟수 반환
return answer;
} else if (i === AList.length - 1) { // A 가 B 가 될 수 없다면 -1 반환
return -1;
}
AList.unshift(AList.pop()); // 위의 두 경우가 아닌 경우 배열의 마지막 요소를 맨 앞으로 당겨오기
answer++; // 반복횟수 + 1
}
}
// 출처: 프로그래머스 youngcheon , 김규택 , July249 , 여대엽 , greattit 외 8 명의 풀이
let solution = (a, b) => (b + b).indexOf(a);
a="hello"
, b="ohell"
라고 했을 때 b+b=ohelloohell"
가 되므로 문자열 a의 index를 구하면.. 문자열이 몇 번 밀렸는지 구할 수 있는 것이다.