그렇게 어려운 문제는 아닌것 같다.

예외 케이스 처리 안된 대충 만든 코드 올려봄 ㅇㅅㅇ


int main()

{

PriorityQueue<DoublyLinkedList<char>> priority_queue(

// 비교 과정 넣어지는 값은 left 우선순위가 right보다 높을 시에 true를 내보냄.

[](const DoublyLinkedList<char>& left, const DoublyLinkedList<char>& right) -> bool {

DoublyLinkedIterator<char> left_iterator = left;

DoublyLinkedIterator<char> right_iterator = right;

while (!left_iterator.end() && !right_iterator.end()) {

if (*left_iterator != *right_iterator) {

return *left_iterator > *right_iterator;

}

++left_iterator, ++right_iterator;

}

// 대충 맨 뒤의 수와 앞의 수를 비교하는 코드 (귀찮아서 그만둠)

   // 비교되지 않은 수의 첫번째가 맨 앞보다 크면 우선순위가 높은 데이터

}

);

int N = getint(); // 대충 정수를 받는 함수

do {

DoublyLinkedList<char> doubly_linked_list;

char digit;

while ((digit = getchar() ^ 48) <= 9)

doubly_linked_list.push_front(reverse_digit(digit)); // reverse digit : 대충 정수를 뒤집는 함수

priority_queue.push(doubly_linked_list);

} while (--N);

do {

DoublyLinkedList<char> doubly_linked_list = priority_queue.pop();

do {

putchar(reverse_digit(doubly_linked_list.pop_back()) ^ 48);

} while (!doubly_linked_list.empty());

} while (!priority_queue.empty());

}

ㅇㅅㅇ