알고리즘

[프로그래머스/programmers] 코딩테스트 연습 - 문자열 밀기 파이썬(Python) 풀이

달리아(Dahlia) 2022. 11. 30. 21:26
문제 설명

문자열 "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

 

소스 코드
def solution(A, B):
    cnt = 0
    listA=list(A)
    listB=list(B)
    for i in range(len(A)):
        if listA == listB:
            return cnt
        listA.insert(0, listA.pop())
        cnt += 1
    return -1

 

풀이

문자열 뒤에서부터 하나씩 빼서 앞으로 붙여주었다. 파이썬은 문자열 슬라이싱이 자유로워서 A = A[-1]+A[:-1] 이렇게 풀었어도 될 것 같다. 

 

마무리

테스트 케이스에서 하나가 자꾸 걸려서 당황했던 문제였다. 알고보니 if 문을 아래로 내려서.. 그랬던 것.. A, B가 같은 문자열이라 밀지 않아도 되는 경우에 0이 리턴돼야하는 조건이었던 것 같다. 언제나 예외를 잘 생각하자 :d 

 

문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/120921