팰린드롬 판단하기

Yun Young Choi·2022년 6월 15일

CodingTest-C

목록 보기
3/15
post-thumbnail



말 그대로 앞에서 읽던 뒤에서 읽던 똑같은지 안 똑같은지 판단하는 프로그램 작성하기


//전체 코드
//solution 함수
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;
}

//main
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");
}

팰린드롬이란?

앞에서 읽거나.. 뒤에서 읽거나... 똑같다! 마치 슈퍼주니어 - 로꾸꺼처럼
로꾸꺼의 가사를 보면 앞에서 읽어도, 뒤에서 읽어도 똑같다.


main 함수 / 설명

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");
}
  1. sentence1에 크기 19인 "never odd or even."; 문자열 할당
  2. ret1에 sentence1을 매개변수로 넘기는 solution 함수 할당
  3. 삼항연산자로 true or false 출력

  4. sentence2에 크기 19인 "palindrome"; 문자열 할당
  5. ret2에 sentence2를 매개변수로 넘기는 solution 함수할당
  6. 삼항연산자로 true or false 출력

solution 함수 / 설명

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;
}
  1. sentence를 매개변수로 받는 bool리턴형 solution 함수
  2. str 변수에 char 크기의 103개의 공간을 할당받는다.
  3. len을 0으로 할당한다.
  4. 반복문을 0부터 sentence의 길이 - 1 만큼 돌린다.
  5. ch에 sentence[i] 할당
  6. ch가 '' 또는 '.'이 아닐 경우 str에 값을 넣은 후 len 1증가
  7. 반복문을 0부터 len / 2 (문자열의 절반만큼 돌린다.)
  8. 만약 str[i]와 str[len - 1 - i]가 다르다면 false 리턴
  9. 같다면 true 리턴

조건 고치기 / + 설명 주석

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;
				}
    }
    //len = 14, 14의 절반인 7만큼 돌리기
    for(int i = 0; i < len / 2; i++){
    
         //왼쪽에서 i번째일 때 오른쪽에서부터 i번째와 같음
   		//len - 1 방의 맨 끝, len -1 - i 
        if(str[i] != str[len - 1 - i]) return false;
        
        //왼쪽 끝과 오른쪽 끝에서 비교하면서 가운데로 옴
    }
    return true;
}


|| 과 && 의 차이

||은 OR의 의미로 '이거나' 라는 뜻이다.
&&는 AND의 의미로 '이고' 라는 뜻이다.

OR = 둘 중 하나가 참이면 참!

AND = 둘 다 참이어야 참!


코드 합본

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;
				}
    }
    //len = 14, 14의 절반인 7만큼 돌리기
    for(int i = 0; i < len / 2; i++){
    
         //왼쪽에서 i번째일 때 오른쪽에서부터 i번째와 같음
   		//len - 1 방의 맨 끝, len -1 - i 
        if(str[i] != str[len - 1 - i]) return false;
        
        //왼쪽 끝과 오른쪽 끝에서 비교하면서 가운데로 옴
    }
    return true;
}

profile
안냥하세요

0개의 댓글