문자열 밀기 (Lv. 0) / 옹알이(1) (Lv. 0) (프로그래머스)

Yeoncheol Kang·2023년 2월 22일
1
post-thumbnail

문자열의 기초를 다루는 문제


문자열 밀기 [Lv. 0]

# 0. deque 라이브러리 로드
from collections import deque

# 1. 오른쪽으로 밀어내는 함수
def rotate_right(A, B):
    cnt = 0
    # 쉬운 구현을 위해 각 문자열을 deque로 변환
    A = deque(A)
    B = deque(B)
    # A == B인 경우 루프 탈출
    while (A != B):
    	# 혹은 한 바퀴를 다 돌면 루프 탈출
        if cnt == len(A):
            break
        tmp = A.pop()
        A.appendleft(tmp)
        cnt += 1
        print(A, cnt)
    return cnt

# A -> str, B -> str
def solution(A, B):
    answer = rotate_right(A, B)
    if answer == len(A):
        answer = -1
    
    return answer
  • dequeappendleft 메소드를 활용하면 간편하게 가장 앞쪽으로 원소를 삽입할 수 있다.


옹알이(1) [Lv. 0]

# 0. 기본 풀이
def solution(babbling):
    answer = 0
    # 1. 발음할 수 있는 옹알이들을 리스트로 만든 후
    available = ["aya", "ye", "woo", "ma"]
    for b in babbling:
        for a in available:
            if a in b:
            	# 2. 발음할 수 있는 단어가 있다면 스페이스로 변환
                # 이렇게 해야 떨어져있던 것들이 합쳐지면서
                # 발음 가능 단어로 만들어지는 것을 방지
                b = b.replace(a, ' ')
                print(a, b)
        # 3. 스페이스들을 전부 없애며 공백으로 만든다
        b = b.strip()
        if b == '':
            answer += 1
                
    return answer
  • 2번에서 아예 공백이 아닌 스페이스(띄어쓰기 한 칸)을 주는 이유는 떨어져 있던 단어들이 붙으면서 발음이 가능해지는 것을 막기 위해서이다.
  • e.g. ay + ye + a에서 ye가 사라지면서 본래 aya 였던 것이 aya가 되고 이 또한 발음이 가능해지기 때문이다.

  • 순열을 이용해 다른 방향으로도 풀 수 있다.
# # 0. 순열을 사용해 단순하게 풀어보자
from itertools import permutations

def solution(babbling):
    answer = 0
    # 1. 발음할 수 있는 옹알이들을 리스트로 만든 후
    available = ["aya", "ye", "woo", "ma"]
    words = []
    # 2. 1개부터 옹알이 개수(4개)까지 가능한 모든 조합을 리스트로 만들어 둔다.
    for i in range(1, 5):
        for j in permutations(available, i):
            words.append(''.join(j))
    
    # 3. 문자열을 돌면서 발음 가능한 단어인지 확인한다.
    for b in babbling:
        if b in words:
            answer += 1
                
    return answer
  • permutation을 사용해 발음 가능 단어 개수별 순열 리스트를 모두 만들어 두었다.
  • babbling의 단어들 중 순열 리스트에 있는 것은 발음이 가능하다는 의미이다.

profile
재밌는 것들을 직접 해보기를 좋아합니다

0개의 댓글