[프로그래머스] LEVEL0 문자열 밀기 파이썬

그린·2023년 2월 20일
0

프로그래머스

목록 보기
13/28
post-thumbnail

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


✔️문제

✅문제 설명

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

✅제한사항

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


✔️풀이

🙋‍♀️내 풀이

def solution(A, B):
    answer = -1
    ## 처음부터 A와 B가 같으면
    if A==B:
        return 0
    for i in range(1, len(A)) :
        ## A를 오른쪽으로 한 칸씩 밀었을때
        A = A[-1]+A[0:-1]
        print(A)
        if A == B:
            return i  
    return answer
  1. 주어진 문자열 A와 B가 처음부터 동일하다면, 0을 리턴한다.
  2. 문자열의 길이만큼 오른쪽으로 한 칸씩 밀면서 B와 비교하고 같으면 민 횟수인 i를 리턴했다.
    2-1. A = A[-1]+A[0:-1]로 오른쪽으로 한칸 씩 미는 것을 표현했다.
  3. 반복문을 빠져나왔다면, B는 A를 밀어서 만들 수 없는 문자이므로 -1을 리턴한다.

🤔다른 사람의 풀이

def solution(A, B): 
	return (B * 2).find(A)
AB
"hello""ohell"1

문자열을 한방향으로 밀기때문에 문자열*2를 했을 때 원래 문자열이 있다면 밀기를 통해 만들 수 있다는 뜻이 된다.
find() 함수는 인자로 받은 문자열의 처음 인덱스를 리턴하고, 만약 찾지 못하면 -1을 리턴하는 것을 이용하여 풀이했다.

0개의 댓글