코딩테스트

[백준][Python] 11728 배열 합치기

yeeejji 2024. 3. 12. 14:58
728x90

정렬, 투포인터 / 실버 5

👩🏻‍💻

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

 

11728번: 배열 합치기

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

www.acmicpc.net

 

 

내 풀이 (정렬 ver)

N, M = map(int, input().split())
arr = []

for _ in range(2):
    arr += list(map(int, input().split()))

print(*sorted(arr))

 

초간단 풀이!

A와 B를 입력받아 정답 배열 arr에 추가해 준 뒤, arr를 정렬한다.

 

 

내 풀이 (투포인터 ver)

N, M = map(int, input().split())

A = sorted(list(map(int, input().split())))
B = sorted(list(map(int, input().split())))

a = 0
b = 0

ans = []

while a < N and b < M:
    if A[a] <= B[b]:
        ans.append(A[a])
        a += 1
    else:
        ans.append(B[b])
        b += 1

if a == N:
    ans += B[b:]
else:
    ans += A[a:]

print(*ans)

 

투포인터로도 풀어봤다.

 

a는 배열 A의 인덱스, b는 배열 B의 인덱스를 나타내는 변수다.

 

각 인덱스가 모두 범위 내에 있을 때에만 반복문을 실행한다.

A[a]가 B[b]보다 작거나 같으면 정답 배열 arr에 A[a]를 추가하고, 다음 인덱스로 이동한다. (a += 1)

A[a]가 B[b]보다 크면 정답 배열 arr에 B[b]를 추가하고, 다음 인덱스로 이동한다. (b += 1)

 

반복문이 끝나고 나서 a == N이라면, A 배열의 모든 값을 검사한 경우이므로, B 배열의 남은 값을 arr에 추가한다.

반대로 B 배열의 모든 값을 검사하여 반복문이 종료된 경우라면, A 배열의 남은 값을 arr에 추가한다.

 

 

위: 정렬, 아래: 투포인터 / 정렬이 더 빠르다!