
https://school.programmers.co.kr/learn/courses/30/lessons/120921
function solution(A, B) {
for (let i = 0; i < A.length; i++) {
if (A === B) return i;
else {
A = A.at(-1).concat(A.slice(0, -1));
}
}
return -1;
}
✔ 문제 설명에 충실한 풀이
✔ A와 B가 같으면 i를 반환 -> i가 곧 밀어야 하는 최소 횟수가 됨
✔ 맨 끝에 위치한 문자 뒤에 나머지 문자열을 붙임으로써 문자열 밀기를 구현
function solution(A, B) {
return (B + B).indexOf(A);
}
이게 어떻게 가능하지..? 라고 생각한 순간 B를 2개 합치고 나서 "아...!" 하고 감탄했다.
✔ A가 hello, B가 ohell이면 B + B는 ohellohell, 즉 A를 밀어서 B가 나오면 B + B에는 A가 반드시 포함되어 있고, 그 위치가 바로 A를 미는 최소 횟수가 되는 것이다.
주어진 조건을 "서로 같은 문자열을 연달아 붙인다"라는 색다른 관점으로 접근한 창의적인 방식이었다.