코딩테스트-숫자 문자열과 영단어

728x90
반응형

최근 카카오 사태로 포스팅을 못하고 개인적인 사정으로 코딩 테스트를 못했다.

 

오늘의 코테는 2021카카오 채용연계형 인턴십에 나온 문제! 고민을 조금 하기는 했지만 strncmp로 쉽게 해결했다.

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int solution(const char* s) {
    int answer = 0;
    char numstr[10][6] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    for(int i = 0; i < strlen(s); i++)  {
        if(s[i] >= 'a' && s[i] <= 'z')  {
            for(int k = 0; k < 10; k++) {
                if(0 == strncmp(&s[i], numstr[k], strlen(numstr[k])))   {
                    answer *= 10;
                    answer += k;
                    break;
                }
            }
        }
        else {
            answer *= 10;
            answer += (s[i] - 0x30);
        }
    }


    return answer;
}

 

 

100% 내가 작성한 코드다. 나와 유사하게 strncmp를 사용한 코드들도 보이고, 영단어 10개를 전부 비교한 코드가 대부분이었다. 흠................. 동작만 하면 되지 뭐.

 

이번 코테는 어느 정도(?) 난이도가 있다고 생각해 나름대로 설명을 적어보도록 하겠다.

 

1. 숫자 영단어 문자열 배열을 만든다. 

 

2. 문자열 s의 요소중 a~z 해당여부를 확인한다. 

 

3. 2번에서 문자를 확인하면 numstr과 일치 여부를 확인한다. 

 

4. 일치하는 영단어의 배열 인덱스를 더하고 자릿수 이동을 위해 10을 곱한다. 

 

5. 확인하는 문자열 s 가 소문자가 아니면 숫자로 간주하고 바로 더한다. 

 

 

 

역시 코드 설명이 가장 어렵다.ㅎㅎㅎㅎㅎ 

 

- 끝 -

728x90
반응형