Level 0) 문자열 밀기 ⭐️

Doozuu·2023년 1월 28일
0

프로그래머스 (JS)

목록 보기
28/183

문제 설명

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

풀이

  1. A와 B가 처음부터 같은 경우에는 바로 0을 return 한다.

  2. A와 B가 같지 않은 경우, pop과 unshift를 이용해 맨 마지막 요소를 빼서 맨 앞에 넣는 행위를 반복한다.
    (이때 반복문은 배열의 크기만큼만 실행한다. 배열 크기만큼 다 돌면 본래대로 돌아오므로 그 이상 할 필요가 없기 때문이다.)
    위의 과정을 반복하며 A와 B가 같아지면 실행 횟수i를 return, 다르면 반복문을 계속 진행한다.

  3. 반복문이 다 끝난 후에도 값이 정해지지 않으면(아무리 밀어도 같아지지 않는 경우) -1을 return 한다.

function solution(A, B) {
    let a = A.split('');
    // 처음부터 같은 경우
    if(A == B) return 0;
    // 같지 않은 경우 같아질 때까지 미는 과정 반복. 같아지면 실행 횟수 return.
    for(i=0;i<=a.length;i++){
        if(a.join('') !== B){
          a.unshift(a.pop());
        }else{
            return i;
        }
    }
   // 밀어도 같아지지 않는 경우
    return -1;
}

pop() : 배열의 맨 뒤 요소를 제거함

unshift() : 배열의 맨 앞에 요소를 넣음


신박한 풀이

B를 이어붙여서 찾은 A의 index가 밀어야 하는 최소 횟수와 같다.

  • ex) A = "hello" B = "ohell"
    B+B == "ohellohell"
    A의 index : "ohellohell" -> 1
function solution(A, B) {
     return (B+B).indexOf(A);
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글