게임 클라이언트 개발/알고리즘 문제

[프로그래머스 level 1] 이상한 문자 만들기

주운녕 2020. 8. 7. 09:30

[출처 : 프로그래머스]

 

문제

문자열 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