본문 바로가기

cospro2급/cospro_1차

2021-05-06

cospro 8번 문제

팰린드롬 판단하기

 

문제 설명

앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 단어 또는 문장을 팰린드롬이라고 한다.

예를 들어 racecar, noon은 팰린드롬 단어이다.

소문자 알파벳, 공백(" "), 그리고 마침표(".")로 이루어진 문장이 팰린드롬 문장인지 점검하려 한다.

문장 내에서 알파벳만 추출하였을 때 팰린드롬 단어이면 팰린드롬 문장이다. 

예를 들어 "Never odd or even."과 같은 문장은 팰린드롬이다.

소문자 알파벳, 공백(" "), 그리고 마침표(".")로 이루어진 문장 sentence가 주어질 때 팰린드롬인지 아닌지를 return하는 solution 함수를 완성한다.

 

매개변수 설명

소문자 알파벳, 공백(" "), 그리고 마침표(".")로 이루어진 문장 sentence가 solution함수의 매개변수로 주어진다.

sentence의 길이는 1 이상 100 이하이다.

sentence에는 적어도 하나의 알파벳이 포함되어 있다.

sentence의 각 문자는 소문자 알파벳, 공백(" "), 또는 마침표(".")이다.

 

return값 설명

주어진 문장이 팰린드롬인지 아닌지 return한다.(true, false)

 

예시

예시 설명

예시 1) 알파벳과 숫자만 추출하여 소문자로 변환해보면 "neveroddoreven"이 되며 팰린드롬이다.

예시 2) 문장의 맨 앞 문자인 "p"와 맨 뒤 문자인 "e"가 다르므로 팰린드롬이 아니다.

 

코드 설명

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h

bool solution(char* sentence) {	
    char *str = (char *)malloc(sizeof(char) * 103); //동적할당
    int len = 0; 
    for(int i = 0; i < strlen(sentence); i++){  //sentence의 길이만큼 돌아감
        char ch = sentence[i]; //돌아가면서 ch에 sentence의 값을 넣어줌
        if(ch != ' ' && ch != '.') str[len++] = ch; 
        //만약 ch가 공백이 아니고 .도 아니면 방에 넣는다.
    }
        for(int i = 0; i < len / 2; i++){ 
        if(str[i] != str[len - 1 - i]) return false;
    }
    return true;
}

int main() {
    char sentence1[19] = "never odd or even.";
    bool ret1 = solution(sentence1);

    printf("solution 함수의 반환 값은 %s 입니다.\n", ret1 == true ? "true" : "false");

    char sentence2[19] = "palindrome";
    bool ret2 = solution(sentence2);

    printf("solution 함수의 반환 값은 %s 입니다.\n", ret2 == true ? "true" : "false");
}
    

if(ch != ' ' && ch != '.') str[len++] = ch;

이 문장을 보면 &&로 해줘야만 공백도 아니고 .도 아닌 온전한 소문자 알파벳이 배열에 들어가 계산을 할 수 있게 된다. 

 

edu.goorm.io/learn/lecture/16921/cos-pro-2%EA%B8%89-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-c%EC%96%B8%EC%96%B4/lesson/817991/1%EC%B0%A8-%EB%AC%B8%EC%A0%9C8-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC-%ED%8C%90%EB%8B%A8%ED%95%98%EA%B8%B0

'cospro2급 > cospro_1차' 카테고리의 다른 글

2021-05-07  (0) 2021.05.07
2021-05-07  (0) 2021.05.07
2021-05-06  (0) 2021.05.06
2021-05-05  (0) 2021.05.05
2021-05-05  (0) 2021.05.05