1 분 소요

문자열 밀기

문제 설명

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

풀어 보기

def solution(A,B):
    count = 0
    for _ in range(len(A)):
        if A == B:
            return 0 
        elif A != B:
            A = A[-1] + A[:-1]
            count += 1
            if A == B:
                return count
    else:
        return -1    

처음에 성공시에 return값이 1인줄 알았는데 밀어야하는 최소수를 return하는 것이었습니다.

solution=lambda a,b:(b*2).find(a)
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

lamda와 collection 그리고 deque에 대해서 내일 정리하겠습니다.! 꼭!

종이 자르기

문제 설명

머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.

스크린샷 2022-07-25 오후 4.49.44.png

정수 M, N이 매개변수로 주어질 때, M x N 크기의 종이를 최소로 가위질 해야하는 횟수를 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 < M, N < 100
  • 종이를 겹쳐서 자를 수 없습니다.

입출력 예

M N result
2 2 3
2 5 9
1 1 0

풀어보기

def solution(M, N):
    A, B = min(M, N), max(M, N)
    return (A-1) + A*(B-1)

다른 풀이

def solution(M, N):
    return (M * N) - 1

업데이트:

댓글남기기