반응형
대칭되는 문자들만 사용하여 최대한으로 길게 새로운 문자열을 만들어라
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 |
댓글