728x90
▶문제 : 코딩 테스트 연습 - 이상한 문자 만들기 | 프로그래머스 (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
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 1 : 자연수 뒤집어 배열로 만들기 C언어 (0) | 2021.12.19 |
---|---|
프로그래머스 Level 1 : 자릿수 더하기 C언어 (0) | 2021.12.18 |
프로그래머스 Level 1 : 약수의 합 C언어 (0) | 2021.12.18 |
프로그래머스 Level 1 : 문자열을 정수로 바꾸기 C언어 (0) | 2021.12.18 |
프로그래머스 Level 1 : 없는 숫자 더하기 C언어 (0) | 2021.12.18 |
댓글