백준 11728

jeonghens·2024년 3월 24일

알고리즘: BOJ

목록 보기
46/125

https://velog.io/@jeonghens/%EB%B0%B1%EC%A4%80-11728

위의 문제에 대한 투 포인터 풀이는 아래와 같다.


먼저 각 배열에 대한 포인터(p_a, p_b)를 선언한다.

그리고 각 포인터가 가리키는 값을 비교하여,
더 작은 값을 정답 배열에 넣고,
해당 포인터의 값을 1만큼 증가시킨다.

둘 중 한 배열의 값이 정답 배열에 모두 들어갔다면,
남은 배열의 값은 정답 배열에 들어간 값보다 크면서 이미 정렬된 값이므로,
정답 배열 뒤에 더해주면 된다.


코드(정답)는 다음과 같다.

import sys

n, m = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
b = list(map(int, sys.stdin.readline().split()))

# 배열 a, b를 합친 배열
result = []
# 배열 a, b에 대한 포인터
p_a, p_b = 0, 0
while p_a < len(a) and p_b < len(b):
    if a[p_a] < b[p_b]:
        result.append(a[p_a])
        p_a += 1
    else:
        result.append(b[p_b])
        p_b += 1

if p_a == len(a):
    result += b[p_b:]

if p_b == len(b):
    result += a[p_a:]

print(*result)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글