본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 83 - 문자열 밀기)

728x90

 

# 문제

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



# 답안 

// 1. 입력: 문자열 A,B
// 2. 출력: A를 회전하여 B를 만들기 위한 최소 회전 횟수

// A를 배열로 복사한다. 
// 반복문 돌릴건데
// A===B면, 0번 밀기
// else면, 뒤에꺼 빼서(pop) 앞에 붙이기(unshift)
// join("")해서 붙인게 === B 일때까지 i+1
// 반복문 돌려도 전부 다 일치 안하면 -1 반환


function solution(A, B) {
    let arr = [...A]
    for(let i = 0; i< arr.length; i++){
        if(A === B)
            return i;
        else{
            arr.unshift(arr.pop())
            if(arr.join('') === B)
                return i+1;
        }
    }
    return -1;
}



# 인사이트

// unshift() 메서드는 새로운 길이를 반환하고 배열 자체를 변경하므로 이 메서드를 호출한 결과를 바로 join() 메서드에 적용할 수 없다.
// 따라서 배열의 변경을 한 줄로 해결할 수 없, 배열을 수정한 후에 join() 메서드를 호출해야한다.
728x90