https://www.acmicpc.net/problem/11728
문제
정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)
둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.
출력
첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.
소스코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
res = []
# a,b에 해당하는 포인터 생성
ap, bp = 0, 0
al, bl = len(A), len(B)
# ap, bp가 해당 리스트 길이와 같아지지 않을동안 반복
while ap != al or bp != bl:
if ap == al:
res.append(B[bp])
bp += 1
elif bp == bl:
res.append(A[ap])
ap += 1
else:
if A[ap] < B[bp]:
res.append(A[ap])
ap += 1
else:
res.append(B[bp])
bp += 1
print(*res)
소스코드 설명
a에 해당하는 포인터, b에 해당하는 포인터를 생성하여 각 리스트의 길이에 도달하면 종료되는 반복문을 생성한다.
a포인터가 a리스트의 길이와 같으면 b리스트 값을 추가한다.
b포인터가 b리스트의 길이와 같으면 a리스트 값을 추가한다.
아닐 경우 비교후 작은 값을 리스트에 추가한다.
'알고리즘' 카테고리의 다른 글
[백준] 2217 - 로프(python) (0) | 2024.08.13 |
---|---|
[백준] 11724 - 연결 요소의 개수(python) (1) | 2024.02.29 |
[백준] 1755 - 숫자놀이(python) (0) | 2024.01.21 |
[백준] 10845 - 큐(python) (1) | 2024.01.04 |
[백준] 2161 - 카드1(python) (0) | 2024.01.02 |