개발 기록 남기기✍️

[프로그래머스] 문자열 밀기 본문

코딩 테스트 연습

[프로그래머스] 문자열 밀기

너해동물원 2023. 1. 2. 15:56

🗒️ 문제 설명

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

 

 

⚠️ 제한 사항

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.

 

👀 입출력 예

A B result
"hello" "ohell" 1
"apple" "elppa" -1

❇️ 나의 풀이

  • 먼저 arr을 전개해서 배열로 만든다.
  • A와 B가 값이 같다면 push를 진행할 필요가 없으므로 return 0을 반환한다.
  • for문을 통해서 i<arr.length 동안 배열의 마지막 요소를 떼어서 첫번째로 붙여넣는 연산을 진행한다.
  • 배열 연산이 끝나면, 배열을 문자형으로 변환한 값이 B와 같은지 체크하고, 같다면  i 값을 반환한다. (몇 번 붙여넣었는지의 값)
  • for문이 끝나도 A와 B가 일치하지 않는다면 return -1을 반환한다.
function solution(A, B) {
    var arr = [...A];
    if(A === B) return 0;
    for(i=1;i<arr.length;i++){
        arr.unshift(arr.pop())
        if(arr.join('') === B) return i
    }
    return -1 
}

 

 

💟 본받고 싶은 코드

let solution=(a,b)=>(b+b).indexOf(a)

✔️ 어쩜 이런 생각을 할 수 있지..?

✔️ 만약 A === B라는 전제 하에 a 배열 요소 전체를 a 자체에 push를 진행하면(잘라내기 없이) b+b와 동일하다.

✔️ b+b 값 안에서 indexOf(a) 함수를 실행하면 a가 있는지를 찾고, a가 시작하는 index를 반환한다. a가 없으면 함수 기능에 의해 자동으로 -1 반환!