본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 1 : 이상한 문자 만들기 C언어

by starfish22 2021. 12. 18.
728x90

▶문제 : 코딩 테스트 연습 - 이상한 문자 만들기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을

programmers.co.kr

 

▶코드 작성

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>//islower, isupper 함수 사용 헤더

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char *solution(const char *s)
{
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char *answer = (char *)malloc(strlen(s) + 1);
    
    strcpy(answer, s);//문자열 복사
    
    for (int i = 0, cnt = 0; i < strlen(answer); i++, cnt++)//cnt변수 홀짝 확인용
    {
        if (cnt % 2 == 0 && islower(answer[i]))//홀수번째이고 소문자일 때
        {
            answer[i] -= ('a' - 'A');//'a'와 'A'의 차이만큼 빼준다
        }
        else if (cnt % 2 == 1 && isupper(answer[i]))//짝수번째이고 대문자일 때
        {
            answer[i] += ('a' - 'A');//'a'와 'A'의 차이만큼 더해준다
        }
        else if (answer[i] == ' ')//띄어쓰기가 있으면
        {
            cnt = -1;//cnt변수 초기화
        }
    }
    return answer;
}

 

▶해석

문자열을 변경해야 되기 때문에 answer 동적 배열에 복사해주고 반복문을 이용하여 소문자인지 대문자인지 띄어쓰기인지 구분하여 변경해준다. 여기서 공백을 기준으로 짝수인지 홀수인지 판단하므로 cnt 변수를 이용하여 공백이 나오면 초기화해준다. cnt가 짝수일 때 islower함수로 소문자인지 판별하고 'a'-'A'만큼 문자의 십진수가 소문자와 대문자가 차이나고 'a'가 더 크므로 소문자를 대문자로 만들어주려면 빼주어야 한다. 마찬가지로 cnt가 홀수일 때 isupper함수로 대문자인지 판별하고 'a'-'A'만큼 더해주면 소문자로 변환해줄 수 있다.

728x90

댓글