목차
두 리스트 합치기
오름차순으로 정렬이 된 두 리스트가 주어지면 두 리스트를 오름차순으로 합쳐 출력하는 프로 그램을 작성하세요.
▣ 입력설명
첫 번째 줄에 첫 번째 리스트의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 리스트 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 리스트의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 리스트 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
▣ 출력설명
오름차순으로 정렬된 리스트를 출력합니다.
▣ 입력예제 1
3
1 3 5
5
2 3 6 7 9
▣ 출력예제 1
1 2 3 3 5 6 7 9
나의코드
n=int(input())
arr1=list(map(int,input().split()))
m=int(input())
arr2=list(map(int,input().split()))
p1=0
p2=0
res=[]
while True:
if p1==n:
res=res+arr2[p2:]
break
elif p2==m:
res=res+arr1[p1:]
break
if arr1[p1]<arr2[p2]:
res.append(arr1[p1])
p1+=1
else:
res.append(arr2[p2])
p2+=1
print(res)
투포인터를 사용해서 각각의 인덱스를 하나씩 비교하며 적은 값을 res 리스트에 넣었다.
또한 종료 조건은 먼저 해당 리스트의 길이를 가리키는 포인터가 발생하면 종료하고 다른 리스트를 최종 res리스트에 더해 주었다.
정답 코드
import sys
sys.stdin=open("input.txt", "r")
n=int(input())
a=list(map(int, input().split()))
m=int(input())
b=list(map(int, input().split()))
p1=p2=0
c=[]
while p1<n and p2<m:
if a[p1]<b[p2]:
c.append(a[p1])
p1+=1
else:
c.append(b[p2])
p2+=1
if p1<n:
c=c+a[p1:]
if p2<m:
c=c+b[p2:]
for x in c:
print(x, end=' ')
나의 코드와 일치 !
'코딩테스트[파이썬] > 알고리즘 문제풀이 입문' 카테고리의 다른 글
[탐색&시물레이션] - 격자판 최대합 (0) | 2024.02.05 |
---|---|
[탐색 & 시물레이션] - 수들의 합 (0) | 2024.02.05 |
[탐색&시물레이션] - 숫자만 추출 (2) | 2024.02.05 |
[탐색&시물레이션] - 회문 문자열 검사 (2) | 2024.02.05 |
[구현력 키우기] - 점수계산 (0) | 2024.02.05 |