본문 바로가기
코테 문제

[아무문제] Pseudo-Palindrom checker

by 케찹이 2020. 4. 21.
반응형

대칭되지 않는 문자들이 몇쌍이 있는지 출력하는 프로그램

Input: ABCDA

Output: 2

Stack스택 사용

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_STACK	10

#define TRUE	1
#define FALSE	0
typedef char Data;

typedef struct {
	Data items[MAX_STACK];
	int top;
}Stack;

void InitStack(Stack* pstack) {
	pstack->top = -1;
}

int IsFull(Stack* pstack) {
	if(pstack->top == MAX_STACK - 1)
		return TRUE;
	else
		return FALSE;
}

int IsEmpty(Stack* pstack) {
	if(pstack->top == -1)
		return TRUE;
	else
		return FALSE;
}

Data Peek(Stack* pstack) {
	if (IsEmpty(pstack))
		exit(1);
	return pstack->items[pstack->top];
}

void Push(Stack* pstack, Data item) {
	if (IsFull(pstack))
		exit(1);
	pstack->items[++(pstack->top)] = item;
}

void Pop(Stack* pstack) {
	if (IsEmpty(pstack))
		exit(1);
	--(pstack->top);
}

int main() {
	Stack stack;
	InitStack(&stack);

	Data datarry[MAX_STACK];
	scanf("%s", datarry);			//문자열 제시!

	for (int i = 0; i < strlen(datarry)/2; i++)		//문자열 절반만 스택에 모두 저장 
		Push(&stack, datarry[i]);			
	
	//checkPald(&stack, datarry);
	int counter = 0;
	int compdata;
	int length = strlen(datarry);
	for (int j = (length+1) / 2; j < length; j++) {
		compdata = Peek(&stack);		
		
		if (compdata == datarry[j])
			counter++;

		Pop(&stack);
	}
	int result = (length+1)/2 - counter;
	printf("%d\n", result);
	return 0;
}
반응형

댓글