염소 라틴어(Goat Latin)란?
영어로 작성된 문장이 주어졌을 때, 이를 특정 규칙에 따라 변환하는 것이 이번 문제의 목표입니다. 염소 라틴어(Goat Latin)는 잘 알려진 피그 라틴어(Pig Latin)와 유사한 언어 유희로, 다음 세 가지 조건을 따릅니다.
- 모음으로 시작하는 단어: 단어 끝에 'ma'를 그대로 붙입니다.
- 자음으로 시작하는 단어: 맨 앞 글자를 잘라내어 단어 끝으로 옮긴 뒤, 'ma'를 붙입니다.
- 인덱스별 'a' 추가: 문장 내 단어의 순서(1부터 시작)만큼 단어 끝에 'a'를 반복해서 붙입니다.
예를 들어 "Adam wants to go to the university"라는 문장은 아래와 같이 변환됩니다.
"Adammaa antswmaaa otmaaaa ogmaaaaa otmaaaaaa hetmaaaaaaa universitymaaaaaaaa"
해결 접근 방법
풀이 자체는 매우 직관적입니다. 먼저 문장을 공백 기준으로 분리해 단어 리스트를 만든 뒤, 각 단어에 대해 위 조건을 검사하고 규칙에 맞게 변환하면 됩니다. 모든 단어의 변환이 끝나면 다시 하나의 문자열로 합쳐 반환합니다. 전체 과정은 문장 길이에 비례하므로 시간 복잡도는 O(N)(N은 문장의 총 길이)입니다.
구현 코드
다음은 위 로직을 파이썬으로 구현한 예제입니다.
class Solution:
def toGoatLatin(self, S):
"""
:type S: str
:rtype: str
"""
temp = S.split(" ")
counter = 1
result = []
vowel = {"a", "e", "i", "o", "u"}
for i in temp:
if i[0].lower() in vowel:
x = i + "ma" + ("a" * counter)
else:
x = i[1:] + i[0] + "ma" + ("a" * counter)
counter += 1
result.append(x)
return " ".join(c for c in result)
ob1 = Solution()
print(ob1.toGoatLatin("Adam wants to go to the university"))
입력
"Adam wants to go to the university"
출력
"Adammaa antswmaaa otmaaaa ogmaaaaa otmaaaaaa hetmaaaaaaa universitymaaaaaaaa"
코드 상세 설명
S.split(" ")— 문장을 공백 기준으로 나누어 단어 리스트를 생성합니다.vowel집합 — 모음 여부를 빠르게 판별하기 위해 집합(set)으로 선언했으며, 대문자로 시작하는 경우도 처리하기 위해lower()로 소문자 변환 후 검사합니다.i[1:] + i[0]— 자음으로 시작하는 단어의 첫 글자를 끝으로 이동시키는 부분입니다."a" * counter— 단어의 인덱스(1부터 시작)만큼 'a'를 반복 추가합니다.counter는 단어를 처리할 때마다 1씩 증가합니다." ".join(...)— 변환된 단어들을 공백으로 연결해 최종 결과 문자열을 만듭니다.
이처럼 문자열 분리, 조건 판별, 재조립의 세 단계만 거치면 염소 라틴어 변환을 손쉽게 구현할 수 있습니다.