본문 바로가기

Python(알고리즘,문제풀이)/프로그래머스(입문100제)

코딩테스트입문 / 문자열 밀기

728x90

📚문제

출처 : 프로그래머스 / 문자열 밀기(https://school.programmers.co.kr/learn/courses/30/lessons/120921)

 

📝풀이

# 1. 문자열 슬라이싱
def solution(A,B):
    for i in range(len(A)):
        if A==B:
            return i
        else:
            # 문자열은 리스트와 달리 수정불가능한(immutable) 구조이기 때문에 A에 재할당
            A = A[-1] + A[:-1]
    return -1 # 한 바퀴 다돌아도 return문 만족하지 못한다면 -1 반환

첫번째 풀이는 문자열을 슬라이싱하여 푸는 방법

 

# 2. 리스트의 insert,pop 함수
def solution(A,B):
    A, B = list(A), list(B)
    for i in range(len(A)):
        if A==B:
            return i
        else:
            A.insert(0,A.pop())

 두 번째 풀이는 리스트 형태로 만든 후 insert, pop 함수 사용

- A.pop()은 마지막인덱스 삭제되며 그 값 반환 

- inser(0)하게 되면 0번 인덱스 자리에 반환된 값 insert

 

# 3. deque
from collections import deque

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

세 번째 풀이는 deque를 이용한 풀이

앞과 뒤 양쪽에서 데이터를 처리할 수 있는 양방향 자료형이며,

스택(stack)이나 큐(queue)처럼 사용 가능

 

# 4. find 함수
def solution(A,B):
	BB = B*2
    return BB.find(A)

 네 번째 풀이는 find 함수를 이용한 방법

이것도 기발한 풀이인 것 같다

A가 'hello'일 때 B가 'lohel'이라면 BB(B*2)는 'lohellohel'이다

이 때, BB.find(A)를 실행하면

'hello'가 시작되는 인덱스인 2가 반환된다

그리고 find함수 특성상 찾지 못한다면 -1을 return 하기 때문에 문제의 조건과 맞는다

 

 

 

풀이 참고 출처 : https://codest.tistory.com/25

 

[Python] 프로그래머스 코딩테스트 연습 > 문자열 밀기 (문자열 슬라이싱, deque)

안녕하세요! 오늘은 문자열 밀기 문제를 여러 가지 방법으로 풀어보겠습니다. 어려운 문제는 아니지만 자료구조의 특징, 속도, 아이디어 등을 고민해 볼 수 있는 문제라고 생각해서 가져왔습니

codest.tistory.com

 

728x90