문제
사람이 입력한 데이터는 지저분합니다. 문자열 목록이 주어지며, whole numbers인 것들만 더하고 나머지는 오류를 내지 말고 무시해야 합니다.
항목은 양쪽 끝의 공백을 제거한 뒤, 선택적인 + 또는 - 부호 다음에 하나 이상의 숫자가 오면 유효합니다. 그 외의 것들(빈 문자열, "2.5" 같은 소수, 단어)은 건너뜁니다.
sum_valid_numbers(values)를 구현하세요.
Input
values: 읽어들일 항목들입니다.
Output
유효한 whole numbers의 합을 반환하세요(없으면 0).
제약 조건
0 ≤ 항목 수 ≤ 1,000
각 항목은 최대 20자; 유효한 숫자는 64비트 정수 범위
예시
입력:
values = ["10", " 5 ", "abc", "-3"]
예상 출력:
expected = 12
입력:
std::vector<std::string> values = {"10", " 5 ", "abc", "-3"};
예상 출력:
long long expected = 12;
입력:
string[] values = new string[] {"10", " 5 ", "abc", "-3"};
예상 출력:
long expected = 12;
설명
"10", " 5 " (공백은 제거됨) 및 "-3"은 whole numbers이고, "abc"는 건너뜁니다. 10 + 5 - 3 = 12.
입력:
values = ["2.5", "", "seven"]
예상 출력:
expected = 0
입력:
std::vector<std::string> values = {"2.5", "", "seven"};
예상 출력:
long long expected = 0;
입력:
string[] values = new string[] {"2.5", "", "seven"};
예상 출력:
long expected = 0;
설명
어떤 항목도 whole number가 아니므로 합은 0입니다.
접근 방법
먼저 스스로 풀어 본 뒤 힌트를 하나씩 열어 보세요.
힌트 1
먼저 공백을 없애고, 남은 것이 올바른 정수인지 판단하세요.
힌트 2
try/except 안에서 변환하면(또는 문자를 검사하면) 멈추지 않고 잘못된 항목을 건너뛸 수 있습니다.
힌트 3
"+"처럼 부호만 있는 문자열은 숫자가 아닙니다.
예상 복잡도
시간 O(전체 길이), 추가 공간 O(1)
참고 자료
이 문제는 CodeUtility에 맞게 수정되었습니다. 위의 설명과 제한 조건을 따르세요.