프로그래머스 코딩테스트 연습 회고록 - 4일차

H.GOO·2022년 11월 30일
0
post-thumbnail

프로그래머스 Lev.0 "문자열 밀기"

문제 설명

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

제한사항

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

입출력 예 설명




나의 풀이

내가 생각한 알고리즘은 다음과 같다.

  1. 문자열 A를 한 글자씩 분리하여 배열로 만든다.

  2. 배열 A의 마지막 요소를 맨 앞으로 당겨온다.

  3. 배열 A를 문자열로 합친 뒤 B와 비교한다.

  4. A와 B가 같다면 반복횟수 반환, B가 될 수 없다면 -1을 반환한다.


function solution(A, B) {
  let answer = 0;
  let AList = A.split("");  // A를 배열로 만들어주기
  const BList = B.split("");  // B를 배열로 만들어주기

  // 문자열 길이만큼 반복
  for (let i = 0; i < AList.length; i++) {
    if (AList.join() == BList.join()) {  // A 와 B 가 같다면 반복횟수 반환
      return answer;
    } else if (i === AList.length - 1) {  // A 가 B 가 될 수 없다면 -1 반환
      return -1;
    }
    AList.unshift(AList.pop());  // 위의 두 경우가 아닌 경우 배열의 마지막 요소를 맨 앞으로 당겨오기
    answer++;  // 반복횟수 + 1
  }
}



다른 사람 풀이 및 느낀점 - 1

// 출처: 프로그래머스 youngcheon , 김규택 , July249 , 여대엽 , greattit 외 8 명의 풀이

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

느낀점

  • 다른 분들의 반응이 곧 내 반응이었다...
  • a="hello" , b="ohell" 라고 했을 때 b+b=ohelloohell" 가 되므로 문자열 a의 index를 구하면.. 문자열이 몇 번 밀렸는지 구할 수 있는 것이다.
  • 밀린 문자열이 맨 앞으로 가므로 b를 두 번 이어 붙이면 원래의 단어가 완성되고 a의 index를 구하면 자연스럽게 몇 개의 단어가 밀린지 알 수 있는 원리였다.
  • a의 index를 구할 수 없는 경우 indexOf() 메소드는 -1을 반환한다는 점에서 힌트를 얻은 것 같다.. 대단하다!!

0개의 댓글