크래프톤 정글/정글에서 문제풀기

스택·큐 Q1. 연결 리스트로 큐 만들고 홀수 제거하기

cedis 2026. 4. 9. 10:20
자료구조 C 실습 · 스택과 큐 · Q1
스택·큐 Q1. 연결 리스트로 큐 만들고 홀수 제거하기
C 파일 하나를 문제 하나로 보고 정리한 풀이 글이다.
이번 글은 함수가 실제로 어떤 연결, 순회, 변환을 수행하는지에 초점을 맞춘다.
Section C Stack and Queue createQueueFromLinkedListremoveOddValues

연결 리스트의 값을 큐로 옮긴 뒤, 큐 안에서 홀수 값을 제거하는 두 함수를 구현하는 문제다. 자료구조 문제라고 해서 꼭 새로운 구조를 설계하는 건 아니다. 기존 연결 리스트를 큐 인터페이스로 감싸고, enqueue/dequeue를 조합해 원하는 필터를 구현하는 연습에 가깝다.

한눈에 보는 문제 정보
원본 파일: C:\Users\cedis\OneDrive\문서\ANTIWORK\WEKK6~~~~~\data_structures_docker\Data-Structures\Stack_and_Queue\Q1_C_SQ.c
대상 함수: createQueueFromLinkedList, removeOddValues
카테고리: 스택과 큐

문제에서 요구한 것

메뉴와 출력 문자열을 보면 이 파일은 특정 자료구조 연산 하나를 직접 구현하도록 만든 실습 문제다. 입력 흐름은 아래처럼 정리할 수 있다.

  • 1: Insert an integer into the linked list
  • 2: Create the queue from the linked list
  • 3: Remove odd numbers from the queue
  • 0: Quit
  • Input an integer that you want to insert into the List
  • The resulting linked list is

핵심 구현 흐름

STEP 1
`createQueueFromLinkedList`에서 원본 리스트를 순회하며 queue에 순서대로 enqueue한다.
STEP 2
`removeOddValues`에서는 큐를 한 번 훑으며 짝수만 남기도록 재구성한다.
STEP 3
최종적으로 큐의 head와 size가 일관되게 유지되는지 확인한다.

핵심 코드

문제 파일 전체를 다 옮기기보다, 실제로 구현해야 했던 함수만 뽑아서 보면 로직이 더 선명하게 들어온다.

핵심 코드: createQueueFromLinkedList
void createQueueFromLinkedList(LinkedList *ll, Queue *q)
{	ListNode *cur;
	cur = ll->head;
	while(cur != NULL)
	{
		enqueue(q, cur->item);
		cur = cur->next;
	}
}
핵심 코드: removeOddValues
void removeOddValues(Queue *q)
{	int item;
	int count = q->ll.size;
	for(int i =0; i<count;i++)
	{	
		item =dequeue(q);
		if (item % 2 ==0)
		{	
			enqueue(q,item);

		}
		else
		{


		}	
	}
}

구현할 때 체크할 점

  • 큐 생성 전에 기존 큐를 비우지 않으면 이전 값이 남아 중복된다.
  • 제거 조건을 검사하는 동안 dequeue와 enqueue 순서를 잘못 잡으면 원소 순서가 꼬일 수 있다.

마무리

이 문제는 거대한 알고리즘을 묻는 문제라기보다, 자료구조를 실제 포인터 연결과 순회 흐름으로 이해하고 있는지 확인하는 실습에 가깝다. 자료구조 문제라고 해서 꼭 새로운 구조를 설계하는 건 아니다. 기존 연결 리스트를 큐 인터페이스로 감싸고, enqueue/dequeue를 조합해 원하는 필터를 구현하는 연습에 가깝다.

같은 카테고리의 다른 문제와 함께 보면, 연결 리스트에서는 재배선, 스택과 큐에서는 순서 제어, 트리에서는 재귀 순회라는 감각이 반복해서 나온다는 점도 같이 볼 수 있다.