문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A
와 B
가 매개변수로 주어질 때, A
를 밀어서 B
가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B
가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
A
의 길이 = B
의 길이 < 100A
, B
는 알파벳 소문자로 이루어져 있습니다.A | B | result |
---|---|---|
"hello" | "ohell" | 1 |
"apple" | "elppa" | -1 |
"atat" | "tata" | 1 |
"abc" | "abc" | 0 |
function solution(A, B) {
if (A === B) return 0
if ([...A].sort().join('') !== [...B].sort().join('')) return -1
let aArr = [...A]
for (let i = 1; i <= A.length; i++) {
const pushArr = [...aArr]
const temp = pushArr[pushArr.length - 1]
pushArr.pop()
pushArr.unshift(temp)
const pushString = pushArr.join('')
aArr = pushArr
if (pushString === B) return i
}
return -1
}
let solution = (a, b) => (b + b).indexOf(a)
function solution(A, B) {
if (A === B) return 0
for (let i = 0; i < A.length; i++) {
A = A.slice(-1) + A.slice(0, -1)
if (A === B) return i + 1
}
return -1
}
실제 위에 코드 설계한 부분이랑 코드 구현 부분을 같이 보면, 처음에 머릿속으로만 생각해서 코드를 설계했을때와 실제 구현했을때의 차이점이 분명하게 존재한다. 아무래도 코드 설계하는 부분은 아직 많이 안해봐서 그런건지, 아니면 그냥 생각하는 힘이 부족해서 그런건지 코드 구현하는 부분과 틀리는 경우가 많이 있는 것 같다. 이 부분의 간극을 조금씩 좁혀나가다보면 생각하는 힘도 길러질거고 코드 구현하는 시간도 단축시킬 수 있을 것 같다.