문제출처 SW Expert Academy
문제의 저작권은 SW Expert Academy에 있습니다.
- 길이 N의 수열 M개를 아래 규칙에 따라 합치려고 한다.
- 합칠 수열(수열2)의 첫숫자보다 큰숫자를 앞 수열(수열1)에서 찾아 그 앞에 끼워넣는다.
- 큰 숫자가 없는 경우 맨 뒤에 붙인다. 마지막 수열까지 합치고 나면 역순으로 10개 출력
입력:
1
4 4 (수열길이 N, 수열갯수 M)
2 3 4 5 (수열1)
4 8 7 6 (수열2)
9 10 15 16 (수열3)
1 2 6 5 (수열4)
출력:
#1 16 15 10 9 5 6 7 8 4 4
- 합칠 수열의 첫글자를 뽑아서 기존 수열과 비교해서 들어갈 인덱스 찾기
- 큰 숫자가 없으면 맨 뒤에 붙이기 (for문과 if문 활용)
- 수열이 다 합쳐지면 으로 뒤에서부터 역순으로 10개 추출
for tc in range(1, int(input()) + 1):
N, M = map(int, input().split())
# 합쳐질 수열 만들기
array = [float('inf')] # 양의 무한대 inf (최대값 구할 때 자주 활용)
cnt = 0 # 수열 더해질때마다 추가될 cnt
for _ in range(M): # 수열갯수만큼 반복
# 개별수열 a
a = list(map(int, input().split()))
for i in range(N*cnt+1):
if a[0] < array[i]:
array[i:i] = a
break
cnt += 1
print(f'#{tc}', end=' ')
# 앞에 *을 붙여야 원소로 출력
print(*array[-11:-1][::-1]) # 뒤에서부터 역순으로 출력
1
4 4
2 3 4 5
4 8 7 6
9 10 15 16
1 2 6 5
#1 16 15 10 9 5 6 7 8 4 4
print(N,M)
4 4
array
[1, 2, 6, 5, 2, 3, 4, 4, 8, 7, 6, 5, 9, 10, 15, 16, inf]
cnt
4
a
[1, 2, 6, 5]