2020년 4월 27일 월요일

5110. [파이썬 SW 문제해결 기본] 7일차 - 수열 합치기

나도 참고할라고 전에 했던거 가져왔다.

노드를 추가할 때 기존에 가지고 있던 head의 노드부터 addToLast를 계속 이용해서 추가한게 아니라 head2의 독자 linkedlist를 만들어 head1의 끝의 링크를 head2의 첫번재 노드에 연결했던 것만 기억이 난다.

import sys

sys.stdin = open("sample_input.txt", "r")

class Node:
    def __init__(self, item, link=None):
        self.item = item
        self.link = link

    def addToFirst(self,data):
        global Head
        Head = Node(data,Head)

    def add(self,pre, data):
        if pre == None:
            print('error')
        else:
            pre.link = Node(data, pre.link)


    def addToLast(self,data):
        global Head
        if Head == None:
            Head = Node(data, None)
        else:
            p = Head
            while p.link != None:
                p = p.link
            p.link = Node(data, None)

    def printall(self):
        if self == None:
            print("empty")
        else:
            p = self            while p != None:
                print(p.item)
                p = p.link

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.for test_case in range(1, T + 1):
    # ///////////////////////////////////////////////////////////////////////////////////    N, M = map(int, input().split())
    numbers = list(map(int, input().split()))

    Head = None    for item in numbers:
        Node.addToLast(Head,item)


    for _ in range(M-1):
        InsertNumbers = list(map(int, input().split()))

        new_node = Node(InsertNumbers[0])
        node = new_node
        for item in InsertNumbers[1:]:
            node.link = Node(item)
            node = node.link

        new_last_node = node

        # 처음에 있을 경우        if Head.item > InsertNumbers[0]:
            new_last_node.link = Head
            Head = new_node
            continue
        # 중간에 있을 경우        MT = False        node = Head
        pre_node = None        while node != None:
            if node.item > InsertNumbers[0]:
                pre_node.link = new_node
                new_last_node.link = node
                MT = True                break            pre_node = node
            node = node.link
        if MT: continue
        # 끝까지 못 찾은 경우 (끝에 붙여야 한다)        pre_node.link = new_node

    result_list = []
    node = Head
    while node != None:
        result_list.append(node.item)
        node = node.link
    print("#{}".format(test_case),*result_list[:-11:-1])

    # ///////////////////////////////////////////////////////////////////////////////////

댓글 없음:

댓글 쓰기