SWEA 5110 수열합치기

IngCoding·2022년 4월 7일
1

파이썬 #1 알고리즘

목록 보기
21/27

문제출처 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]
profile
Data & PM

0개의 댓글