#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문이 한 번 반복될 때마다
증가하게 함으로써 문제를 해결했다.
*******************************************************************************************************
'공부' 카테고리의 다른 글
(프로그래머스)로또의 최고 순위와 최저 순위 (0) | 2021.10.08 |
---|---|
(프로그래머스)없는 숫자 더하기 (0) | 2021.10.06 |
최소공배수(lcm), 최대공약수(gcd) (0) | 2018.03.13 |
Dynamic Programming (0) | 2017.09.14 |
(오일러 11번) 수평, 수직, 또는 대각선 방향으로 연속된 숫자 네 개의 곱 중 최대값은 얼마입니까? (0) | 2017.09.12 |
댓글