문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
function solution(A, B) {
let k = Array.from(A)
k.push(k.shift())
let result = k.join("")
if(result === B) {
return 1
}
else return -1
}
※ 참고로 틀린 답이다. 어디가 틀렸을까?
function solution(A, B) {
let count = 0;
while (A !== B) {
let k = Array.from(A)
k.unshift(k.pop())
A = k.join('')
count++;
if (count > A.length) return -1;
}
return count;
}
while문을 사용하여 A 문자열을 오른쪽으로 한 칸씩 밀어서 B 문자열을 만들어내는 과정을 반복한다. A 문자열이 B 문자열이 될 때까지 반복하며, 이 때마다 count 변수를 증가시켜 A 문자열을 밀어낸 횟수를 계산한다.
let count = 0은 반복문에서 A 문자열을 이동시킨 횟수를 저장하기 위한 변수이다. 초기값을 0으로 설정하여 반복문에서 A 문자열을 이동시키면서 이동한 횟수를 1씩 증가시킨다.
이동한 횟수를 저장해두면 최종적으로 A를 B로 이동시키기 위해 필요한 최소한의 이동 횟수를 알 수 있다.
따라서 let count = 0을 사용하여 변수를 초기화하고, 반복문에서 이동한 횟수를 1씩 증가시켜 저장한다.
let count = 0 은 다른 문제풀때 초기화하는 방법으로 쓰이니 알고있자.
만약 A 문자열을 한 바퀴 이상 돌려도 B 문자열이 되지 않으면, A를 밀어서 B가 될 수 없기 때문에 -1을 리턴한다. 마지막으로 count 변수를 리턴하여 A를 밀어낸 최소 횟수를 반환한다.
let solution=(a,b)=>(b+b).indexOf(a)
이게뭐지..?
function solution(A, B) {
var answer = 0;
const a = A.split("")
const b = B.split("")
while(a.join("") != b.join("")){
a.unshift(a[a.length-1])
a.pop()
answer += 1
if(answer == a.length) break
}
return answer === a.length ? -1 : answer;
// return a
}
function solution(_A, _B) {
const N = _A.length;
const A = _A.split("");
const B = _B.split("");
let i = 0;
while (i < N && A.join("") !== B.join("")) {
A.unshift(A.pop());
i += 1;
}
return A.join("") === B.join("") ? i : -1;
}
const solution=(A, B)=>{
if(A===B) return 0;
let stack = B.split('');
let count = 0;
for(let i=1;i<=stack.length;i++){
stack.push(stack.shift());
if(stack.join('')===A){
count = i;
break;
}
};
return count || -1;
}
function solution(A) {
let k = Array.from(A)
k.shift()
k.push()
return k
}
console.log(solution(A))
//e,s,t
↓
function solution(A) {
let k = Array.from(A)
k.shift()
k.push(k.shift())
return k
}
console.log(solution(A))
//s,t,e
어떻게 while문을 이용하여 반복적으로 옮길 수 있을지 고민을 많이했다.
자꾸 배열에만 집착하고 있었다. A와 B는 문자열이라는 조건을 간과하게 된다.
P.S ChatGPT를 이용하여 내가 어디서 막혔는지 빠르게 점검할 수 있었다.