word1
, word2
: 입력되는 2개의 단어 ()
2개의 단어 word1
, word2
가 주어졌을 때, word1
부터 한 글자씩 번갈아 넣어 만든 문자열을 출력하는 문제이다.
이 때, 더 긴 단어일 경우 사이에 들어갈 문자가 없으므로 그냥 바로 넣는다.
word1
부터 시작하므로 결과 리스트에 word1
은 짝수 번째, word2
는 홀수 번째에 들어갈 것이다.
이를 활용해 만들어질 문자열의 길이부터 구하고 그 길이만큼 결과 리스트를 정의해서 그 안에 하나씩 값을 채워 넣는 방식으로 구현한다.
for 루프 →
join →
최종 시간복잡도
최악의 경우 이므로 충분히 동작할 수 있다.
pop
해서 교차로 한 글자씩 새로운 리스트에 넣으려고 햇는데 Memory Limit Exceeded
가 발생했다.class Solution:
def mergeAlternately(self, word1: str, word2: str) -> str:
# 만들 수 있는 문자열의 최대 크기 정의
max_length = max(len(word1), len(word2)) * 2
# 만들 수 있는 문자열 저장할 리스트 정의
words = [''] * max_length
# 각 단어의 현재 인덱스 정의
i1, i2 = 0, 0
# 값 넣기
for i in range(max_length):
# 짝수번째엔 word1
if i % 2 == 0:
# 단어 길이가 최대 길이보다 짧아서 제한
if i1 < len(word1):
words[i] = word1[i1]
# 인덱스 증가
i1 += 1
# 홀수번째엔 word2
else:
if i2 < len(word2):
words[i] = word2[i2]
# 인덱스 증가
i2 += 1
# 리스트를 한 단어로 합치기
words = ''.join(words)
return words
class Solution:
def mergeAlternately(self, word1: str, word2: str) -> str:
# 결과 저장 리스트
res=[]
# 2개의 포인터를 각 단어의 인덱스로 초기화
p1,p2=0,0
# 두 포인터 중 하나라도 끝까지 도달할 때까지 반복
while p1<len(word1) or p2<len(word2):
# word1에 문자 추가 조건
if p1<len(word1):
res.append(word1[p1])
p1+=1
# word2에 문자 추가 조건
if p2<len(word2):
res.append(word2[p2])
p2+=1
return "".join(res)