알고리즘

[백준] 11728 - 배열 합치기(python)

inthyes 2024. 1. 22. 14:18

https://www.acmicpc.net/problem/11728

 

11728번: 배열 합치기

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거

www.acmicpc.net

 

문제

 

정렬되어있는 두 배열 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