[C언어] Stack&Queue(3) - isStackPairwiseConsecutive 함수 구현하기

2025. 4. 13. 20:15·크래프톤 정글/Code 정글(C언어)

Stack&Queue(3) - isStackPairwiseConsecutive 함수 구현하기

스택 내 숫자가 짝수 단위로 연속적인지 확인하는 함수

주어진 요소 확인하기

구조체

  • Stack: (struct) 스택 구조체
    • ll: (LinkedList) 스택 연산 구현을 위한 연결 리스트 구조체
  • LinkedList: (struct) 연결 리스트 구조체
    • size: (int field) 연결 리스트 요소 갯수
    • *head: (pointer field) 연결 리스트 첫 노드의 주소
    • *tail: (pointer field) 연결 리스트 마지막 노드의 주소
  • ListNode: (struct) 노드 구조체
    • item: (int field) 노드의 값
    • *next: (pointer field) 다음 노드의 주소

isStackPairwiseConsecutive 함수의 매개 변수

  • *s: (pointer) 스택 주소

 

핵심 아이디어

  • 스택이 비어있거나, 홀수 개이면 return 0
  • 연속된다는 것은 두 값의 쌍의 차이가 1임을 의미
    • 16 15 (O) / 10 11 (O) / 10 6 (X)
  • 쌍 중 하나라도 연속되지 않으면 return 0
  • 모든 쌍이 연속되는 쌍이라면 return 1

 

구현하기

int isStackPairwiseConsecutive(Stack *s) {
	// 스택이 비어있거나 원소 개수가 홀수면 짝 검사 불가능
	if (s == NULL || s->ll.size % 2 == 1) return 0;
    
	// 스택에서 꺼낸 값을 임시로 저장할 버퍼 리스트 생성 및 초기화
	LinkedList *buf = malloc(sizeof(LinkedList));
	buf->head = NULL;
	buf->size = 0;
    
	int val1, val2;
	int isPair = 1;		// 초기값은 true로 설정
	
	// 스택에서 두 개씩 꺼내면서 짝 검사
	for (int i = 0; i < s->ll.size / 2; i++) {
		val1 = pop(s);
		val2 = pop(s);
        
		// 나중에 복원할 수 있도록 버퍼에 역순으로 저장 (stack 구조 고려)
		insertNode(buf, 0, val1);
		insertNode(buf, 0, val2);
        
		// 두 수의 차가 1이 아니면 실패 처리 및 반복문 종료
		if (abs(val1 - val2) != 1) {
			isPair = 0;
			break;
		}
	}
    
	// 버퍼에 저장된 값을 이용해 원래대로 스택 복원
	ListNode *cur = buf->head;
	while (cur != NULL) {
		push(s, cur->item);
		cur = cur->next;
	}
    
	free(buf);	// 메모리 누수 방지
	return isPair;	// 결과 반환 (1: 모두 짝 연속(성공), 0: 실패)
}
저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > Code 정글(C언어)' 카테고리의 다른 글

[C언어] Stack&Queue(5) - recursiveReverseQueue 함수 구현하기  (0) 2025.04.13
[C언어] Stack&Queue(4) - reverseQueue 함수 구현하기  (0) 2025.04.13
[C언어] Stack&Queue(2) - createStackFromLinkedList 함수 구현하기  (0) 2025.04.13
[C언어] Stack&Queue(1) - createQueueFromLinkedList 함수 구현하기  (0) 2025.04.13
[C언어] 스택(Stack) 구현 실습하기  (0) 2025.04.13
'크래프톤 정글/Code 정글(C언어)' 카테고리의 다른 글
  • [C언어] Stack&Queue(5) - recursiveReverseQueue 함수 구현하기
  • [C언어] Stack&Queue(4) - reverseQueue 함수 구현하기
  • [C언어] Stack&Queue(2) - createStackFromLinkedList 함수 구현하기
  • [C언어] Stack&Queue(1) - createQueueFromLinkedList 함수 구현하기
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무) N
        • 마이 정글(WIL, 에세이)
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[C언어] Stack&Queue(3) - isStackPairwiseConsecutive 함수 구현하기
상단으로

티스토리툴바