Notice
Recent Posts
Recent Comments
Tags
more
Today
Total
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
관리 메뉴

SW 꿈나무

[Level 1][C] 이상한 문자 만들기 본문

Algorithm/Programmers

[Level 1][C] 이상한 문자 만들기

현식 :) 2020. 3. 26. 19:02
  • 문제

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

  • 제한 조건

    • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
    • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
  • Example

    Input 1 : "try hello world"
    Output 1 : "TrY HeLlO WoRlD"
  • Code

    #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    #include <string.h>
    
    char* solution(const char* s) {
    
        int length = strlen(s);                            // 정수형 변수 length 선언 및 문자열 s의 길이 대입
        char array[length];                                // length 크기만큼의 문자형 배열 선언
        int temp=0;                                        // 정수형 변수 temp 선언 및 초기화
    
        for(int i=0;i<length;i++) {                        // length만큼 반복
            array[i]=s[i];                                 // 배열 array에 문자열 s 대입
        }
    
        for(int i=0;i<length;i++) {                        // length만큼 반복
            if(array[i]==' ') {                            // array[i]가 ' '이고
                if(i%2==0) {                               // i가 짝수이면
                    temp = 1;                              // temp = 1
                }
                else {                                     // i가 홀수이면
                    temp = 0;                              // temp = 0
                }
            }
            else {                                         // array[i]가 ' '이 아니고
                if((i+temp)%2==0) {                        // i + temp 가 짝수이고
                    if(array[i]>='a'&&array[i]<='z') {     // array[i]가 소문자이면
                        array[i]=array[i]-('a'-'A');       // array[i]를 대문자로 변경
                    }
                }
                else {                                     // i + temp 가 홀수이고
                    if(array[i]>='A'&&array[i]<='Z') {     // array[i]가 대문자이면
                        array[i]=array[i]+('a'-'A');       // array[i]를 소문자로 변경
                    }
                }
            }
        }
    
        char* answer = (char*)malloc(length+1);            // answer에 length+1 만큼 메모리 동적 할당
    
         for(int i=0;i<length;i++) {                       // length만큼 반복
            answer[i]=array[i];                            // answer에 array 대입
        }
    
        answer[length]=NULL;                               // answer 마지막 자리에 NULL문자 대입
    
        return answer;                                     // answer 반환
    }
Comments