반응형
문제해석
2n 의 길이의 nums 라는 array 와 n 의 값을 전달해준다. 예를 들어 array 가 [x1, x2, ... y1, y2, ...] 의 형식이라면 이 array 의 내용들을 x 영역과 y 영역으로 반으로 나누어 [x1, y1, x2, y2, ...] 로 섞어준 array 를 return 해주면 된다.
풀이
점차 python 의 array, list 에 익숙해지기 시작하면서 실제 문제는 금방 풀었다. 처음에 풀이한 답은 아래와 같다.
class Solution:
def shuffle(self, nums: List[int], n: int) -> List[int]:
returnList = list(range(2 * n))
for i in range(n):
returnList[i * 2] = nums[i]
returnList[i * 2 + 1] = nums[i + n]
return returnList
주어진 nums 와 같은 길이의 returnList 라는 list 를 만들어 두고, 여기에 하나씩 채워나가는 형식이다. 기본적인 알고리즘은 n 만큼 for 문을 돌리면서 한번에 2칸씩 채워나가는 방식이다. i번째 for 문이 돌때, returnList[i * 2] 의 칸 (0, 2, 4, 6...번째)을 nums[i] 로 하나씩 가져오고, 그와 동시에 returnList[i*2+1] 의 칸 (1, 3, 5, 7...번째) 를 nums[i+n]로 하나씩 다시 채워나간다.
답을 푸는 데는 문제가 없었지만, 굳리 저렇게 두칸씩 채워나가는 for 문을 안돌려도 될것 같은 생각에 아래와 같이 다시 풀어봤다.
class Solution:
def shuffle(self, nums: List[int], n: int) -> List[int]:
returnList = []
for i in range(n):
returnList.append(nums[i])
returnList.append(nums[i + n])
return returnList
이번에는 비어있는 returnList 를 만들어 두고 똑같이 for 문을 돌리면서 2칸씩 새로 만들어서 채워나가는 방식이다. 두개 알고리즘에 시간상 이득은 없었지만, 이렇게도 저렇게도 되는 것을 만들어 봤다.
반응형
댓글