본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.8] 팰린드롬 판단하기 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 6.
반응형

팰린드롬 판단하기


문제 설명

 

앞에서 읽거나 뒤에서 읽거나 똑같은 단어 또는 문장을 팰린드롬이라 합니다. ( racecar, noon)

소문자 알파벳, 공백(" "), 마침표(".")로 이루어진 문장이 팰린드롬 문장인지 점검하려 합니다. 문장 내에서 알파벳만 추출하였을 때에 팰린드롬 단어이면 팰린드롬 문장입니다. 예를 들어, "Never odd or even."과 같은 문장은 팰린드롬입니다.

 

소문자 알파벳, 공백(" "), 마침표(".")로 이루어진 문장 sentence가 주어질 때 팰린드롬인지 아닌지 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.

 


예시

 

sentence return
"never odd or even." true
"palindrome" false

 

예시 설명

 

1번 문장. 알파벳, 숫자만 추출하여 소문자로 변환하면 "neveroddordven"이 되어 이 단어는 팰린드롬입니다.

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


수정해야 할 코드

 

더보기
bool solution(char* sentence) {	
    char *str = (char *)malloc(sizeof(char) * 103);
    int len = 0;
    for(int i = 0; i < strlen(sentence); i++){
        char ch = sentence[i];
        if(ch != ' ' || ch != '.') str[len++] = ch;
    }
    for(int i = 0; i < len / 2; i++){
        if(str[i] != str[len - 1 - i]) return false;
    }
    return true;
}

 

수정

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

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

 

논리 연산자
|| 하나라도 참이면 참
모두 거짓일 경우에만 거짓
&& 하나라도 거짓이면 거짓
모두 참일 경우에만 참

||은 한가지 조건만 참이면 if문을 수행하고 

&&은 두 가지 조건 모두 참이여야 지만 if문을 수행한다. 

 

이 코드에서는 공백이거나 마침표가 아니면 str[len]에 ch를 넣고 str[len]++을 해야 한다. 

그래서 ||을 사용하면 공백이 아니어도 str[len]에 ch를 넣고 마침표가 아니어도 str[len]에 ch를 넣어 원래의 문장을 그대로 str[]에 넣는 거다. 

 

|| 사용 시

never odd or even. neve ro dd or even. false
palindrome palindrome false

 

&& 사용 시

never odd or even. neveroddoreven true
palindrome palindrome false

 

코드 해석 및 전체 코드 

 

for (int i = 0; i < strlen(sentence); i++) 

: 0부터 sentence - 1 까지 돌리기

 

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

: ' '이거나 '.'이 아니면 str[len]에 ch를 넣고 ++

 

for (int i = 0; i < len / 2; i++)

: 팰린드롬인지 판단하기. 

  문자열을 반으로 잘라

 

if (str[i] != str[len - 1 - i]) return false;

i방과 len - 1 - i 방 비교하여 같지 않을 경우 false 리턴 

str[i] str[len - 1 - i]
str[0] n str[13] n
str[1] e str[12] e
str[2] v str[11] v
str[3] e str[10] e
str[4] r str[9] r
str[5] o str[8] o
str[6] d str[7] d

 

#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++) {
        char ch = sentence[i];
        if (ch != ' ' && ch != '.') str[len++] = 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("The return value of solution function is %s \n", ret1 == true ? "true" : "false");

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

    printf("The return value of solution function is %s \n", ret2 == true ? "true" : "false");
}

cos pro 2급 기출문제

github

반응형

댓글