Js 프로그래머스 문자열 밀기

이명진·2023년 1월 19일
0

코드카타

목록 보기
57/69

요즘은 레벨 0이 생겨서 0을 풀어보고 있다.
레벨 0은 쉬운것은 엄청쉬워서 (사칙연산, 등 기초) 등은 굳이 벨로그에 작성하지 않았다. 그냥 1분컷 나는 문제들도 많았기 때문에 얼마 남지 않은 문제들 중 그래도 생각을 좀 해봐야 하는 문제들이 남아서 풀고 있는데 웬만해서는 0레벨이라서 기록을 남기지 않으려 했는데 고정관념을 깨뜨리는 문제를 발견해서 적게 되었다.

문제 요약

문자를 오른쪽으로 민다 매개변수 두개가 주어지는데 하나는 기본 문자 하나는 밀어진 stirng이 주어지는데 오른쪽으로 밀었을때 최소로 민 값을 구하면 된다.

문제 풀이

나는 처음에 최소 라고 해서 왼쪽으로 밀고 오른쪽으로 민 두개에서 최소값을 구하는줄 알았다. 역시 문제를 잘 읽어야 한다..

일단 처음 접근했을때 재귀로 문제를 풀어야 겠다고 생각을 하고 함수를 하나 만들었다.

function solution(A, B) {
     if(A===B){
        return 0
    }
    let answer = 0;

    let rightA = A;
    let cnt = 0;
    for(let i=0; i<A.length;i++){
      cnt++
 
      rightA = pushRight(rightA);
      if(rightA === B){
          break;
      }
    }
   if(cnt===A.length){
        return -1
    }
  console.log(B+B)
    return cnt;
}

function pushLeft(A){
  
  let newA = '';
   for(let i=0; i<A.length;i++){
      
      if(A[i+1]){
        newA+=A[i+1];
      }else{
          newA+=A[0]
      }
    }
  return newA
}
function pushRight(A){
  let newA = '';
  newA+=A[A.length-1]
    for(let i=0; i<A.length-1;i++){
      newA+=A[i]
    }
  return newA
}

pushLeft 함수를 만들어서 반복문으로 문자들을 다 더해줬다.
이렇게 간단히 생각했는데 이 역시도 불필요하고 좋지 않은 풀이다.
일단 정답을 맞추기는 했다.

왼쪽으로 밀면서 문자를 계속 변경하고 변경한 문자가 완성된 문자열과 같을때 cnt를 리턴하면 된다.

slice를 해서 붙여주는 것이 더 간단하고 반복문을 안돌아서 더 성능이 좋을것 같다.

다른 사람의 풀이

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

한줄.. 대단하고 고정관념을 깨뜨렸다. 두번째로 주어진 매개변수가 밀기가 끝난 문자이다. 이 문자 두개를 합쳐서 원본 문자를 찾으면 되는 것이다.
새로운 발상이었다. 전혀 생각지도 못했는데 대단하신 분이다.

단순히 기존의 문자열을 문제 그대로 하나씩 밀어가는 로직을 생각했는데
생각 자체가 문자를 미는 것을 생각치 않고 완성된 문자열 두개를 합쳐서 기존 문자열을 찾다니 대단한 발상이었다. 역시 다른 사람들의 풀이에 내공이 엄청나신 분들이 많다.
또 하나 고정관념을 깨뜨리고 배울수 있었다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글