[출처 : 프로그래머스]
문제
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백 문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항
-
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야 합니다.
-
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
입출력 예
s |
return |
try hello world |
TrY HeLlO WoRlD |
입출력 예 설명
try hello world는 세 단어 try, hello, world로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 TrY, HeLlO, WoRlD입니다. 따라서 TrY HeLlO WoRlD 를 리턴합니다.
풀이
1. 문자열을 인덱스 단위로 차례로 읽는다.
2. 처음 공백을 만나기 전까지 i와 index의 값은 동일하다.
3. i로 각 단어의 짝수&홀수를 판단한다.
4. -> 짝수이고, 그때의 단어가 소문자이면 (소문자-> 대문자)
5. -> 홀수이고, 그때의 단어가 대문자이면 (대문자-> 소문자)
6. i와 index를 동시에 증가시킨다.
7. index가 공백을 만나면 i를 -1로 만들어 공백 다음 문자를 짝수로 판단할 준비를 한다.
8. 문자열의 문자가 '\0' 를 만나면 과정을 종료한다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char* solution(const char* s) {
int i=0, index=0;
char* answer = (char*)malloc(sizeof(s[0])*strlen(s)+1);
strcpy(answer, s);
while(answer[index]!='\0'){
if(answer[index]==' ') i=-1;
else if((i%2==0) && (answer[index]>96)) answer[index]-=32;
else if((i%2==1) && (answer[index]<91)) answer[index]+=32;
i++;
index++;
}
return answer;
}
* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.
* 문제 출처 - https://programmers.co.kr/learn/courses/30/lessons/12930
'게임 클라이언트 개발 > 알고리즘 문제' 카테고리의 다른 글
[프로그래머스 level 1] 자연수 뒤집어 배열로 만들기 (0) | 2020.08.07 |
---|---|
[프로그래머스 level 1] 자릿수 더하기 (0) | 2020.08.07 |
[프로그래머스 level 1] 약수의 합 (0) | 2020.08.06 |
[프로그래머스 level 1] 문자열을 정수로 바꾸기 (0) | 2020.08.06 |
[프로그래머스 level 1] 수박수박수박수박수박수?(strcpy 활용하기) (0) | 2020.08.05 |