[기초] 문자열 곱하기

제로·2026년 2월 25일

📍문제

문자열 my_string과 정수 k가 주어질 때,
my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.

⚠️ 제한사항

  • 1 ≤ my_string의 길이 ≤ 100
  • my_string은 영소문자로만 이루어져 있습니다.
  • 1 ≤ k ≤ 100
# 내가 작성한 코드
def solution(my_string, k):
	answer = my_string * k
    return answer

이것밖에 생각이 안 났다.
혹시 너무 간단한 건 아닌지, 더 알고리즘 문제에 맞게 풀어 볼 수 있는 방법은 없는지 알아보았다.

1. for loop

def solution(my_string, k):
	answer = ''
    for _ in range(k):
    	answer += my_string
    return answer

왠지 모범답안 같았다. 문제에도 answer= '' 이 주어져 있어서 딱 이런 로직을 바라고 문제 낸 느낌.
k만큼 for 루프를 돈다. 진행하는 동안 빈 answer 변수에 my_string 내부 문자열을 k만큼 반복해 출력한다. 시각적으로 이해하기 쉬운 코드라고 생각된다.

2. join()

def solution(my_string, k):
	return ''.join([my_string for _ in range(k)])

join() 함수를 통해 문자열을 공백을 기준으로 병합하는 것이다.(문자열을 합할 때 join() 함수를 많이 얘기하는 것 같다. 한눈에 보기 어렵지만 작성하기에 편리해서 그런 것 같기도 하다. 기억해 두자.) 리스트를 만들어서, 그 안에 my_string 문자열을 k만큼 리스트에 넣는다.

3. Recursion

def solution(my_string, k):
	if k == 0: # 만약 k가 0이라면 공백 출력,
    	return ""
    return my_string + solution(my_string, k - 1)
  1. solution 함수로 들어가서, 먼저 k가 0인지 아닌지 확인한다. 만약 0이 아니라면,
  2. 마지막 return 문으로 가서 my_string을 출력한다.
  3. 그 후 solution 함수를 다시 호출하여, 그 안에 my_string과
  4. 이미 한 번 my_string을 출력하였으니 k - 1을 넘겨 준다.
  5. k가 0이 될 때까지 my_string을 옆에 덧붙이기를 반복하고,
  6. 0이 되면 공백을 출력하며 재귀를 종료한다.

재귀함수는 k가 너무 크면 stack overflow가 날 수 있어, 반복을 많이 해야 한다면 추천하지 않는다. 되려 for문을 사용하는 것이 더 효과적이다.

재작년에 알고리즘 공부할 때 로직 짜기 어려워서 애먹었는데 다시 마주하다니...
solution을 계속 재귀해서 호출하는 걸 이해하여아만 내가 직접 로직을 짜는 데에 어려움이 없을 것 같다. 알고리즘 공부하려면 제대로 꿰고 싶은데... 더 공부해 봐야지.

0개의 댓글