그렇게 어려운 문제는 아닌것 같다.
예외 케이스 처리 안된 대충 만든 코드 올려봄 ㅇㅅㅇ
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());
}
ㅇㅅㅇ
댓글 0