리스트가 주어졌을 때, 각 요소를 리스트 길이(n)만큼 반복하여 새로운 리스트를 만드는 문제입니다.
문제 이해하기
예를 들어 입력 리스트가 nums = [1, 5, 8, 3]이라면, 리스트의 길이는 4이므로 각 요소를 4번씩 반복해야 합니다. 따라서 출력 결과는 다음과 같습니다.
[1, 1, 1, 1, 5, 5, 5, 5, 8, 8, 8, 8, 3, 3, 3, 3]
해결 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- n := nums의 크기(길이)로 설정합니다.
- ret := 결과를 담을 새로운 빈 리스트를 생성합니다.
- nums의 각 요소(num)에 대해 다음을 수행합니다.
- [num] * n으로 해당 요소를 n번 반복한 리스트를 만들고, ret에 이어 붙입니다.
- 모든 요소 처리가 끝나면 ret을 반환합니다.
구현 예제
아래 파이썬 코드로 위 알고리즘을 구현할 수 있습니다.
def solve(nums):
n = len(nums)
ret = []
for num in nums:
ret += [num] * n
return ret
nums = [1, 5, 8, 3]
print(solve(nums))입력
[1, 5, 8, 3]
출력
[1, 1, 1, 1, 5, 5, 5, 5, 8, 8, 8, 8, 3, 3, 3, 3]
코드 설명
핵심은 파이썬의 리스트 곱셈 연산자(*)입니다. [num] * n은 요소 num을 n번 포함하는 새 리스트를 생성하며, += 연산자를 사용해 기존 리스트 뒤에 손쉽게 연결할 수 있습니다.
시간 복잡도는 O(n²)로, 리스트 길이가 n일 때 최종 결과 리스트의 크기가 n²이 되기 때문입니다. 더 간결하게 작성하고 싶다면 리스트 컴프리헨션을 활용해 한 줄로 표현하는 것도 가능합니다.
def solve(nums):
return [num for num in nums for _ in range(len(nums))]