[Python3] 백준 11728번 - 배열 합치기 풀이 (Two-Pointer)

돌멩이·2024년 8월 6일
0

알고리즘

목록 보기
2/17

📌 문제 정보

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

유형: 정렬, 투포인터

난이도: 실버5

스스로 풀었는가? ✅




💻 작성 코드

import sys

readline = sys.stdin.readline

N, M = map(int, readline().split())
arr = list(map(int, readline().split()))
brr = list(map(int, readline().split()))

arr_idx = 0
brr_idx = 0
answer = []

while arr_idx < len(arr) and brr_idx < len(brr):
    a = arr[arr_idx]
    b = brr[brr_idx]
    if a < b:
        answer.append(a)
        arr_idx += 1
    else:
        answer.append(b)
        brr_idx += 1

while arr_idx < len(arr):
    answer.append(arr[arr_idx])
    arr_idx += 1

while brr_idx < len(brr):
    answer.append(brr[brr_idx])
    brr_idx += 1

output = ' '.join(map(str, answer))
print(output)



🎯 접근 방식

  1. 정렬된 두 배열을 합치려면 각 배열에 있는 값을 비교해야 하므로 투포인터를 이용한다.
  2. 포인터를 통해 배열을 순회하며 더 작은 값을 answer에 추가한다.
  3. 한 쪽 배열의 모든 값이 합쳐졌다면 다른 배열의 남은 값을 answer에 추가한다.



💡 개선사항

  1. list를 그대로 출력해서 한 번 틀렸다. 문제를 볼 때 Output을 잘 보자.
  2. 병합 이후에 남은 값들을 합칠 때 answer.extend(arr[arr_idx:]) 를 통해 간단히 해결할 수 있다.



[ktb-algorithm-study] 1주차
profile
하나를 배웠을 때 하나를 알면 잘하는 것이다. 💡

0개의 댓글