프로그래머스/파이썬_입문

문자열 밀기

싱싱한복초이 2025. 1. 17. 10:31

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

[문제 설명]

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

 

제한사항

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

 

[나의 풀이]

def solution(A, B):
    if A == B:
        return 0
    
    for i in range(1,len(A)):
        nA = A[len(A)-i:len(A)] + A[:len(A)-i]    
        if nA == B:
            return i
        
    return -1

앞에서 공부했던 배열 회전시키기를 활용했다.

https://todareistodoletsgobokchoy.tistory.com/92

 

배열 회전시키기

https://school.programmers.co.kr/learn/courses/30/lessons/120844 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

todareistodoletsgobokchoy.tistory.com

(+챗지피티 추천 코드)

def solution(A, B):
    if A == B:
        return 0

    for i in range(1, len(A)): 
        # 오른쪽으로 i번 밀기
        nA = A[-i:] + A[:-i]
        if nA == B:
            return i

    return -1  # B로 만들 수 없는 경우

 

[다른 풀이]

1)

solution=lambda A,B:(B*2).find(A)

 

2)

from collections import deque

def solution(A, B):
    a, b = deque(A), deque(B)
    for cnt in range(0, len(A)):
        if a == b:
            return cnt
        a.rotate(1)
    return -1

 

이 코드는 Python의 collections 모듈에서 제공하는 deque를 활용하여 문자열 A를 오른쪽으로 한 칸씩 회전시키며 문자열 B와 비교하는 방식으로 동작합니다. 

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

연속된 수의 합  (0) 2025.01.16
종이 자르기  (0) 2025.01.16
다음에 올 숫자  (1) 2025.01.15
치킨 쿠폰  (0) 2025.01.15
이진수 더하기  (0) 2025.01.14