혹시나 잘못된 개념 전달이 있다면 댓글 부탁드립니다. 저의 성장의 도움이 됩니다.
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 몇 번 밀어야 하는지 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
바로가기
A의 첫번째 값과 B에서 인덱스 추출한 값을 차례대로 비교했다. 하지만 이 경우에 첫번째 값이 B에서 여러번 사용되는 경우에는 올바른 값을 추출하기 어렵다.
즉, B.indexOf(A[0])
, B.lastIndexOf(A[0])
가 다를 경우에 문제가 발생한다.
function solution(A, B) {
// 입력: 문자열
// 출력: 숫자
// A 첫번째 기준으로 B에 일치하는 인덱스 추출
// -> 인덱스 다음 자리값 비교(인덱스 차이 => 리턴값 추론)
// 반복문으로 차례대로 값이 일치하는지 비교한다.
// (a인덱스+차이)%길이 ->b의 인덱스 값
let gap = B.indexOf(A[0]);
const length = A.length;
for(let i = 1; i<length; i++ ){
const char = A[i];
if(char !== B[(gap+i)%length]){
gap = -1;
break;
}
}
return gap;
}
function solution(A, B) {
// result에 -1을 할당한다.
// a를 한자리씩 이동한 문자열을 생성하는 콜백함수를 정의한다.
// 입력값: 이동한 값.
// 반환값: 새로 정의한 문자열
// 반복문으로 A의 길이만큼 한글자씩 이동한 결과값이 B와 일치하는 i의 값을 result 변수에 할당한다.
let result = -1;
const stringPusher = (num)=>A.slice(-num)+A.slice(0,-num)
for(let i = 0; i< A.length; i++){
const newString = stringPusher(i);
newString === B ? result=i: null;
}
return result;
}
A 문자열 자체를 검색할 수 있는 좋은 방법이었다.
function solution(A, B){
return (B+B).indexOf(A)
}