본문 바로가기
알고리즘/코딩 테스트 문제

[프로그래머스] 영어가 싫어요(C)

by 진진리 2023. 9. 21.
728x90
  • 내가 작성한 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
long long solution(const char* numbers) {
    long long answer = 0;
    char* ptr;
    ptr = numbers;
    while(strncmp(ptr,"",1)!=0){
        answer *= 10;
        if(strncmp(ptr,"zero",4)==0) ptr += 4;
        else if(strncmp(ptr,"one",3)==0) {answer+=1; ptr += 3;}
        else if(strncmp(ptr,"two",3)==0) {answer+=2; ptr += 3;}
        else if(strncmp(ptr,"three",5)==0) {answer+=3; ptr += 5;}
        else if(strncmp(ptr,"four",4)==0) {answer+=4; ptr += 4;}
        else if(strncmp(ptr,"five",4)==0) {answer+=5; ptr += 4;}
        else if(strncmp(ptr,"six",3)==0) {answer+=6; ptr += 3;}
        else if(strncmp(ptr,"seven",5)==0) {answer+=7; ptr += 5;}
        else if(strncmp(ptr,"eight",5)==0) {answer+=8; ptr += 5;}
        else if(strncmp(ptr,"nine",4)==0) {answer+=9; ptr += 4;}
        
    }
    return answer;
}

while문 조건에서 처음에는 (!ptr)

하지만 ptr은 해당 위치에서의 문자x 

해당 위치부터의 문자열을 가리키므로 변경 후 정답

 

  • 다른 사람 풀이 참고
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
long long solution(const char* numbers) {
    char* engnum[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    int len[] = {4, 3, 3, 5, 4, 4, 3, 5, 5, 4};
    long long answer = 0;
    char* ptr;
    ptr = numbers;
    
    while(strncmp(ptr,"",1)!=0){
        answer *= 10;
        for(int i=0;i<10;i++)
            if(strncmp(ptr,engnum[i],len[i])==0){
                answer += i;
                ptr += len[i];
                break;
            }
    }
    return answer;
}

break; 빼먹음