알고리즘
[알고리즘] 두 리스트 합치기
오승미
2022. 1. 27. 23:00
📌
오름차순으로 정렬이 된 두 리스트가 주어지면 두 리스트를 오름차순으로 합쳐 출력하는 프로 그램을 작성하세요.
< input example >
3 #길이
1 3 5 #value
5 #길이
2 3 6 7 9 #value
✔️ code
import sys
sys.stdin=open("input.txt", "r")
n=int(input())
list_n=list(map(int, input().split()))
m=int(input())
list_m=list(map(int, input().split()))
#list_m value를 list_n에 추가
for i in list_m:
list_n.append(i)
#정렬
list_n.sort()
print(list_n)
>>>
코드가 짧고 단순해서 좋아했는데 좋아할 것이 아니었다.
이렇게 sort() 메소드를 사용하면 nlogn 의 시간 복잡도가 사용되기 때문에,
다른 효율적 알고리즘을 이용해야 한다.
📍
p1과 p2는 각각 a,b 리스트 value 를 가르키는 포인터 역할을 한다.
a[p1] 과 b[p2] 를 비교해서 새로운 리스트 c 에 append 하고,
append 된 값을 가진 리스트의 포인터를 1 증가시켜주는 방식이다.
만약 a 리스트가 먼저 c 리스트에 정렬되면 b의 남은 값은 c 리스트 뒤에 더해주는 방식을 사용했다.
#sort() 시간 복잡도: nlogn
p1=p2=0
c=[]
while p1<n and p2<m:
if a[p1]<=b[p2]:
c.append(a[p1])
p1+=1
else:
c.append(b[p2])
p2+=1
if p1<n:
c=c+a[p1:]
if p2<m:
c=c+b[p2:]
for x in c:
print(x, end=' ')