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; 빼먹음
'알고리즘 > 코딩 테스트 문제' 카테고리의 다른 글
[프로그래머스] 등수매기기(C) (0) | 2023.09.21 |
---|---|
[프로그래머스] 문자열 계산하기(C) (0) | 2023.09.21 |
[프로그래머스] 잘라서 배열로 저장하기(C) (0) | 2023.09.21 |
[프로그래머스] 이진수 더하기(C) (0) | 2023.09.21 |
[프로그래머스] 모스 부호(1)(C) - strtok() (0) | 2023.09.21 |