본문 바로가기
코테 문제

[아무문제] Pseudo-Palindrome Checker2

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

대칭되는 문자들만 사용하여 최대한으로 길게 새로운 문자열을 만들어라

Input: ABCDA

Output(순서는 달라도 됨): ABA

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 palin[50] = {0,};
	int counter = 0, k = 0;         //k는 palin배열의 index값. 
	int compdata;
	int length = strlen(datarry);
	for (int j = (length+1) / 2; j < length; j++) {
		compdata = Peek(&stack);		
		
		if (compdata == datarry[j]){
			palin[k] = compdata;
			k++; 
			counter++;
		}

		Pop(&stack);
	}
	
	//Output 결정할 함수
	int islengthodd;
	if(length % 2 == 1) islengthodd = 1;
	for(int m=0;m<k;m++){
		printf("%c",palin[m]);	
	}
	
	if(islengthodd == 1){
		printf("%c",datarry[(length+1)/2-1]);
	}
	
	for(int n=k-1;n>=0;n--){
		printf("%c",palin[n]);
	}
	printf("\n");
	return 0;
}
반응형

'코테 문제' 카테고리의 다른 글

[백준] 2562번: 최댓값  (0) 2020.04.22
[아무문제] Removing duplicated nodes  (2) 2020.04.22
[아무문제] Pseudo-Palindrom checker  (0) 2020.04.21
[백준] 2941번: 크로아티아 알파벳  (0) 2020.04.17
[백준] 1546번: 평균  (0) 2020.04.17

댓글