코딩테스트/SWExpertAcademy

수열 합치기 Python(SW Expert Academy)

멍토 2020. 5. 18.

난이도 : D3

문제번호 : 5110

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVJ1r6qfkDFAWg

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

 

입력

첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50

다음 줄부터 테스트 케이스의 별로 첫 줄에 수열의 길이 N, 수열의 개수 M, 이후 M개의 줄에 걸쳐 1000이하의 자연수로 구성된 수열이 주어진다. 4<=N<=1000, 1<=M<=1000

출력

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 완성된 수열의 맨 뒤부터 10개의 숫자를 역순으로 출력한다.

예시

입력 출력

4 4
2 3 4 5
4 8 7 6
9 10 15 16
1 2 6 5
5 5
273 415 58 798 251
675 193 494 506 365
479 390 224 334 387
107 402 569 422 183
88 709 994 206 916
10 10
178 778 659 231 274 123 788 16 483 404
36 14 602 74 287 689 730 703 611 339
445 468 126 821 946 212 218 143 999 923
288 792 249 142 996 999 570 757 141 921
98 87 800 892 401 244 661 179 403 985
474 315 694 816 838 525 288 94 609 6
789 433 474 883 927 841 242 233 286 749
7 667 875 986 107 957 887 520 430 649
721 206 65 776 328 807 845 908 382 836
707 811 790 652 805 190 407 257 668 307
#1 16 15 10 9 5 6 7 8 4 4
#2 251 798 365 506 494 193 675 387 334 224
#3 404 483 16 788 123 274 231 659 778 178 

2. 문제풀이

이 문제는 SWEA에 Intermediate에 있는 문제로 연결리스트를 구현해서 풀어봐야 합니다.

그렇지만... 귀찮았다...

파이썬에 내장되어있는 list기능을 이용하여 문제를 풀었다.

슬라이싱 기능을 이용하면 쉽게 리스트 중간에 데이터를 삽입할 수 있다.


3. 소스코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#D3 5110 수열 합치기
 
for t in range(1int(input()) + 1):
    N, M = map(int, input().split())
    #첫 리스트 입력받기
    linked_list = list(map(int, input().split()))
    #리스트 하나 받았으니까 개수 -1
    for _ in range(M-1):
        #삽입할 리스트 받고
        temp = list(map(int, input().split()))
        check = True
        #반복해서 체크
        for i in range(len(linked_list)):
            #삽입할 원소보다 크다면
            if linked_list[i] > temp[0]:
                #슬라이싱을 이용하여 삽입
                linked_list[i:i] = temp
                #체크변수 변경하고
                check = False
                #반복문 탈출
                break
        #끝까지 못찾았다면 제일 뒤에 추가
        if check:
            linked_list.extend(temp)
    #뒤에 10개를 출력해야 하므로 슬라이싱 하고 뒤집기
    print_list = reversed(linked_list[len(linked_list)-10:])
    #결과 출력
    print('#{} '.format(t), end='')
    print(*print_list)

댓글

💲 광고입니다.