BOJ 11728 배열 합치기

LONGNEW·2020년 12월 24일
0

BOJ

목록 보기
4/333

시간 1.5초, 메모리 256MB
input :

  • N(배열 A의 크기) M(배열 B의 크기) (1 <= N, M <= 1,000,000)
  • 배열 A의 내용
  • 배열 B의 내용 (수들은 절대값이 10^9보다 작거나 같은 정수)

output :

  • 두 배열을 합친 후 정렬한 결과를 출력한다.

사실 그냥 두 배열 리스트컴프리헨션이나, append 하고 정렬 시키면 되긴 하는데.
문제에선 병합 정렬의 merge메소드를 통해서 정렬 하길 원하는 것 같고. 이것이 시간 복잡도는..
위에 거랑 비슷할 거 같음.
반복이 계속 끝 날 경우 : 두 배열 중 하나라도 idx가 len(배열)이 된 경우.

while A_idx < len(A) and B_idx < len(B):

그 때에 아직 까지 len(배열)이 되지 않은 배열을 슬라이싱 해서 정답 리스트에 붙인다.

if A_idx == len(A):
    answer = answer + B[B_idx:]
else:
    answer += A[A_idx:]

정답코드 :


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

A_idx = 0
B_idx = 0
answer = []
while A_idx < len(A) and B_idx < len(B):
    if A[A_idx] < B[B_idx]:
        answer.append(A[A_idx])
        A_idx += 1
    elif A[A_idx] > B[B_idx]:
        answer.append(B[B_idx])
        B_idx += 1
    else:
        answer.append(A[A_idx])
        answer.append(A[A_idx])
        A_idx += 1
        B_idx += 1

if A_idx == len(A):
    answer = answer + B[B_idx:]
else:
    answer += A[A_idx:]

for number in answer:
    print(number, end=" ")

pypy3 으로 제출 하는게 맞는 거 같다.
너무 느림....

0개의 댓글