본문 바로가기
공부

(프로그래머스)숫자 문자열과 영단어

by 하프상 2021. 10. 6.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int solution(const char* s) {
    int answer = 0;
    int length = 0;
    int j = 0;
    
    length = strlen(s);
    
    char* c_answer = (char*)calloc(length, sizeof(char)); // 문자열 동적할당
    
    for(int i=0; i<length; i++)
    {
        if(isalpha(s[i]))
        {
            if(s[i] == 'z')
            {
                c_answer[j] = '0';
                i += 3;
            }
            else if(s[i] == 'o')
            {
                c_answer[j] = '1';
                i += 2;
            }
            else if(s[i] == 't')
            {
                if(s[i+1] == 'w')
                {
                    c_answer[j] = '2';
                    i += 2;
                }
                else
                {
                    c_answer[j] = '3';
                    i += 4;
                }
            }
            else if(s[i] == 'f')
            {
                if(s[i+1] == 'o')
                {
                    c_answer[j] = '4';
                    i += 3;
                }
                else
                {
                    c_answer[j] = '5';
                    i += 3;
                }
            }
            else if(s[i] == 's')
            {
                if(s[i+1] == 'i')
                {
                    c_answer[j] = '6';
                    i += 2;
                }
                else
                {
                    c_answer[j] = '7';
                    i += 4;
                }
            }
            else if(s[i] == 'e')
            {
                c_answer[j] = '8';
                i += 4;
            }
            else if(s[i] == 'n')
            {
                c_answer[j] = '9';
                i += 3;
            }
            else{/*nothing*/}
        }
        else
        {
            c_answer[j] = s[i];
        }
        j++;
    }
    
    answer = atoi(c_answer); // 문자열 -> 정수로 변환, <stdlib.h> 선언해야함
    
    free(c_answer); // 동적할당 후 메모리 해제
    return answer;
}

 

*******************************************************************************************************

로직 구현까지 완료 했는데 출력이 자꾸 잘려서 나왔다. 

ex:) 23456 -> 실제출력:234

 

원인은 c_answer 배열의 인자를 for문의 int i로 설정을 해놓았기 때문에

1zero345 가 입력이었다면

c_answer 배열에는 10   345 와 같이 중간에 공백이 생겨버렸다.

 

따라서 c_answer 배열의 인자를 i로 안하고 따로 int j를 선언해서 공백없이 for문이 한 번 반복될 때마다

증가하게 함으로써 문제를 해결했다.

*******************************************************************************************************

댓글