-
프로그래머스 문자열 밀기STUDY/Code TEST 2023. 6. 20.
[level 0] 문자열 밀기 - 120921
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
성능 요약
메모리: 33.4 MB, 시간: 0.04 ms
구분
코딩테스트 연습 > 코딩테스트 입문
채점결과
Empty
문제 설명
문자열 "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 "atat" "tata" 1 "abc" "abc" 0
입출력 예 설명
입출력 예 #1
- "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.
입출력 예 #2
- "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.
입출력 예 #3
- "atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.
입출력 예 #4
- "abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.
※ 공지 - 2023년 4월 24일 테스트케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
코드
function solution(A, B) { let lengthA = A.length if(A === B) return 0 for(let i=lengthA;i>0;i--){ if((A.slice(i) + A.slice(0,i)) === B){ return lengthA-i } } return -1 }
코드 설명
A를 밀어서 B를 만들 수 있는지 확인 하는 것이 키포인트라고 생각했다.
"hello" -> "ohell" 는 1번 밀린 형태
"hello" ->"lohel" 는 2번
"hello" ->"llohe" 는 3번
"hellohello" 에서 "ohell" 은 hell"ohell"o 로 인덱스 값이 4이다.
여기서 hello의 길이 5를 빼주면 5-4 = 1 이 나온다.
나머지도 마찬가지로 A.length - 인덱스값으로 결과값을 도출해냈다.추가 설명
let solution=(a,b)=>(b+b).indexOf(a)
위의 코드는 다른 사람의 풀이를 갖고 온 것이다.
이 풀이를 보자마자 감탄을 했는데, 정말 발상의 전환이 이런게 아닌가 싶다.
A = "hello", B = "ohell" 일 때
B + B = "ohellohell" 이다. 이 때 indexOf(A) 를 해주면
값으로 1이 나온다.
만약 A와 B가 같을 땐 0이 나올 것이고, 맞지 않다면 -1을 반환해주게 된다.
이런 해법을 이용하면 1차원 배열에서도, 2차원 배열에서도 충분히 활용할 수 있겠다고 느꼈다.
예를 들어 2차원 배열에서도 값이 이동하는 문제가 있다면
1차원 배열처럼 값을 연결시킨 형태로 만들어 문제를 더 쉽게 풀어 나갈 수 있다.'STUDY > Code TEST' 카테고리의 다른 글
프로그래머스 2016년 (0) 2023.06.28 프로그래머스 팩토리얼 (0) 2023.06.27 프로그래머스 왼쪽 오른쪽 (0) 2023.06.19 프로그래머스 저주의 숫자 3 (0) 2023.06.16 프로그래머스 직사각형 넓이 구하기 (0) 2023.06.14 - 0 <