한 걸음씩
[프로그래머스][JS] 문자열 밀기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/120921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(A, B) {
const arrA = A.split('')
const arrB = B.split('')
var answer = 0;
if (A === B){
return 0
}else{
for (let i = 0; i < arrA.length; i++){
if (arrA.join('') === arrB.join('')){
return answer
}else{
arrA.unshift(arrA.pop())
answer += 1
}
}
}
return - 1
}
A문자열의 요소를 하나씩 밀어서 B가 되면 되는데
pop과 unshift의 조합으로 풀면 쉽다.
그런데 pop과 unshift는 배열 메서드라서 배열로 만들어준 후에 조건문으로 확인을 해줘야 한다.
처음 조건은 A와 B가 처음부터 같은 경우인데 이 경우에는 0을 반환한다.
그렇지 않은 경우에는 arrA 길이만큼 반복을 하는데 그 이유는 마지막 요소를 빼서 맨 앞에 넣어주고를 배열 길이 이상확인 할 필요가 없기 때문이다. 배열길이만큼 순회해서 arrB와 같지 않다면 몇 번을 반복해도 같아질 수 없음을 말하는 것이기 때문이다.
arrA와 arrB를 비교할 때 join메서드로 문자열로 만들어준 후 비교하는데 이는 배열이 같더라도 변수가 다르기 때문에 다른 참조값을 갖게 된다.
문제 풀 때 초반에 잘 못 생각한 게 arrA을 뒤집었을 때 arrB가 되면 return -1이라고 생각했는데 너무 큰 오류였다
뒤집어서 같아진다는 것이 pop, unshift를 해서 같아지는 것은 아예 다른 문제이기 때문이다.
apple을 뒤집으면 elppa가 되지만 pop, unshift를 한다고 elppa가 될 순 없다.
리뷰
풀고 나면 어려운 문제가 아니구나 생각이 드는데
막상 문제를 푸는 도중에는 좀 헷갈리는 것 같다.
문제를 꼭 잘 읽어보기..!
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 그림 확대 (0) | 2023.06.26 |
---|---|
[프로그래머스][JS] 수열과 구간 쿼리 2 (0) | 2023.06.26 |
[프로그래머스][JS] 종이 자르기 (0) | 2023.06.25 |
[프로그래머스][JS] 삼각형의 완성조건 (2) (0) | 2023.06.24 |
[프로그래머스][JS] 이상한 문자 만들기 (0) | 2023.06.24 |