Lv0. 문자열 밀기

zz·2023년 3월 1일
0

프로그래머스

목록 보기
17/36

[문자열 밀기]

문제 설명

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

제한사항

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

입출력 예

ABresult
"hello""ohell"1
"apple""elppa"-1
"atat""tata"1
"abc""abc"0

풀이

내 풀이

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

가독성을 높이기 위해 slice를 따로 지정했는데 딱히 지정할 필요 없었던거같기도 하고.. 암튼 그렇네 기본에 충실한.. 풀이라고 해야하나?

다른 사람 풀이 1

solution=lambda a,b:(b*2).find(a)

보자마자 아 이걸 왜 생각 못했지 싶었던 풀이
람다를 사용하지 않고 풀게 된다면

def solution(A, B): 
	return (B * 2).find(A)

이렇게 된다
find function 을 까먹고 있었네 역시 또 이번에도 기본기에 충실해야한다는것.. 너무 과제에 매몰되어서 코딩하다 보니까 이런걸 놓치는 것 같다 과제는 있는 것을 사용하지 않고 직접 짜서 구현해내는게 대부분이다보니까 그게 맹점이 되는듯

다른 사람 풀이 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

deque를 쓴 사람이 많던데 queue를 사용해서 rotate 시키는 식이더라 Deque는 생각도 못해본거라 좀 신선했다

profile
응애 나 애기개발자

0개의 댓글