Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- stream
- 윤성우 열혈자료구조
- 이스케이프 문자
- s
- datastructure
- Algorithm
- insertion sort
- buffer
- 알기쉬운 알고리즘
- coding test
- Stack
- R
- Graph
- 이것이 자바다
- list 컬렉션
- 윤성우의 열혈 자료구조
- 메모리구조
- C programming
- C 언어 코딩 도장
- Selection Sorting
- 혼자 공부하는 C언어
- Serialization
- JSON
Archives
- Today
- Total
Engineering Note
두 리스트 합치기 본문
it 취업을 위한 알고리즘 문제 풀이
문제
코드
import sys
#sys.stdin = open("input.txt","rt")
list1 = []
list2 = []
list3 = []
n1 = int(input())
list1 = list(map(int,input().split()))
n2 = int(input())
list2 = list(map(int,input().split()))
list3 = list1 + list2
list3.sort()
for x in list3:
print(x,end=" ")
import sys
sys.stdin = open("input.txt","rt")
list1 = []
list2 = []
list3 = []
n1 = int(input())
list1 = list(map(int,input().split()))
n2 = int(input())
list2 = list(map(int,input().split()))
i = 0
j = 0
while i < n1 and j < n2:
if list1[i] < list2[j]:
list3.append(list1[i])
i += 1
else:
list3.append(list2[j])
j += 1
#while i <n1:
# list3.append(list1[i])
# i +=1
#while j < n2:
# list3.append(list2[j])
# j+=1
#파이썬스러운 코드
if i < n1:
list3 = list3 + list1[i:]
if j < n2:
list3 = list3 + list2[j:]
for x in list3:
print(x,end=" ")
문제해결방법
- 첫 번째는 파이썬스러운 코드로 구현해보았다.
- 두 리스트를 받은 후 +연산자로 리스트를 합쳐서 새로운 리스트에 저장하고 정렬한 후 출력했다.
- 이 방법은 sort 함수가 NlogN의 시간 복잡도를 가지므로 더 좋은 방법을 생각했다. 문제에서 주어지는 리스트의 값들이 이미 정렬된 형태이기 때문에 2개의 포인터 변수를 활용해서 비교하면 N의 시간복잡도를 가진 코드를 작성할 수 있다.
- 두 번째 방법은 포인터 변수를 두어 리스트의 요소들을 비교하며 정렬하는 방법으로 구현했다.
- i,j 포인터 변수가 모두 list1과 list2의 크기보다 작을 때 두 포인터 변수는 리스트의 요소들을 가리키고 list1[i]와 list2[j]의 값을 비교하여 작은 값을 list3에 넣어 주었다.
- 반복문이 종료된 후에는 한 리스트의 값들이 남았다는 것이고 이 리스트는 다른 리스트의 값들보다 모두 크기 때문에 list3 뒷부분에 합쳐 주기만 하면 된다. 합칠 때는 슬라이싱기능을 이용해서 합쳐주었다.
'Problem Solving > 파이썬 알고리즘 문제풀이(코딩테스트 대비)' 카테고리의 다른 글
인접행렬(가중치 방향그래프) (0) | 2021.07.05 |
---|---|
송아지 찾기 (0) | 2021.06.15 |
카드 역배치(정올 기출) (0) | 2021.06.08 |
숫자만 추출 (0) | 2021.06.08 |
회문 문자열 검사 (0) | 2021.06.07 |
Comments