알쓸코지
article thumbnail

🔗 문제

https://school.programmers.co.kr/learn/courses/30/lessons/120921

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 AB가 매개변수로 주어질 때, 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

 

💻 Code

from collections import deque


def solution(A, B):
    if A == B:
        return 0
    else:
        queue = deque(A.strip())

        for i in range(1, len(A)):
            queue.rotate(1)
            new_string = ''.join(queue)

            if new_string == B:
                return i

        return -1

1. A == B인 경우

  • 바로 0을 리턴해준다.

2. A != B인 경우

  • Deque.rotate()를 이용하기 위해서 A를 deque으로 변환한다.
  • 1부터 len(A) - 1까지 for문을 돌려서 queue.rotate(1)을 이용하여 A를 오른쪽으로 1씩 회전시킨다. (이때 i는 몇 번 회전했는지를 의미함)
  • ''.join(queue)를 이용하여 A를 다시 문자열로 변환한 뒤 이것이 B와 일치하다면 i를 리턴한다.
  • for문이 종료되었다면 AB가 될 수 없다는 뜻이므로 -1을 리턴한다.

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Lv.0/Python] 두 수의 합  (0) 2023.07.07
[Lv.0/Python] 특이한 정렬  (0) 2023.07.07
[Lv.0/Python] 최빈값 구하기  (0) 2023.07.07
[Lv.0/Python] OX퀴즈  (0) 2023.07.06
[Lv.0/Python] 홀수 vs 짝수  (0) 2023.07.05
profile

알쓸코지

@chocoji

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!