개발 일지
2047. Number of Valid Words in a Sentence (문장의 유효한 단어 수) 본문
문장은 소문자('a'~'z'), 숫자('0'~'9'), 하이픈('-'), 문장부호('!', '.', '',', '.'), 공백(')으로만 구성됩니다. 각 문장은 하나 이상의 공백으로 구분된 하나 이상의 토큰으로 나눌 수 있습니다.
토큰은 다음 세 가지가 모두 참일 경우 유효한 단어입니다:
- 소문자, 하이픈 및/또는 구두점(숫자 없음)만 포함합니다.
- 하이픈 '-'는 하나만 사용할 수 있습니다. 있으면 소문자("a-b"는 유효하지만 "-ab" 및 "ab-"는 유효하지 않습니다)로 둘러싸여 있어야 합니다.
- 구두점 표시는 하나만 사용할 수 있습니다 . 있는 경우 토큰 끝에 있어야 합니다("ab", "cd!" 및 "."는 유효하지만 "a!b" 및 "c."는 유효하지 않습니다).
유효한 단어의 예로는 "a-b", "afad", "ba-c", "a!", "!" 등이 있습니다.
문자열 문장이 주어지면 문장 내의 유효한 단어 수를 반환합니다.
예시 1:
입력: sentence = "cat and dog"
출력: 3
설명: 문장에서 유효한 단어는 "cat", "and", "dog" 입니다.
예시 2:
입력: sentence = "!this 1-s b8d!"
출력: 0
설명: 문장에 유효한 단어가 없습니다.
"!this"는 문장부호로 시작하므로 잘못되었습니다.
"1-s" 및 "b8d"는 숫자를 포함하므로 유효하지 않습니다.
예시 2:
입력: sentence = "alice and bob are playing stone-game10"
출력: 5
설명: 문장에서 유효한 단어는 "alice", "and", "bob", "are", 그리고 "playing" 입니다.
"stone-game10"은(는) 숫자가 포함되어 있으므로 유효하지 않습니다.
조건:
- 1 <= sentence.length <= 1000
- 문장에는 소문자 영문자, 숫자, ', '-', '!', '.', '.', '.'만 포함됩니다.
- 토큰은 적어도 1개는 있어야합니다.
정답:
using System.Text.RegularExpressions;
public class Solution {
public int CountValidWords(string sentence) {
int result = 0;
string[] sentenceSplit = sentence.Split(' ');
var regex = new Regex(@"^([a-z]+(-?[a-z]+)?)?(!|\.|,)?$");
foreach (var word in sentenceSplit)
{
if (!string.IsNullOrEmpty(word) && regex.Match(word).Success)
{
result += 1;
}
}
return result;
}
}
해설: ' '로 구분된 단어가 조건에 성립하는지 그리고 그 조건에 성립하는 단어가 몇개인지 해결하는 문제입니다.
여러가지 조건에 맞추기 위해서 정규식을 사용하는게 좋겠다고 판단하여 단어를 나눈 후 정규식으로 체크하고 갯수를 return하는 방식으로 해결하였습니다.
해당 정규식 ([a-z]+(-?[a-z]+)?)?(!|\.|,)? 에서 [a-z]+는 a부터 z까지 하나 이상 있는지 체크하고 -?는 -이 하나거나 없는 상황을 체크합니다, 그리고 [a-z]+를 또 다시 사용하여 -이 소문자에 둘러쌓여있는지 체크하였습니다.
-을 사용하지 않는 경우도 있을 수 있으니 -?를 사용해주었고 소문자 자체가 없고 구두점만 있는지 체크하기 위해서 ([a-z]+(-?[a-z]+)?)? 전체 괄호 안에 ?를 사용해주었습니다.
그리고 반대로 구두점은 없고 소문자만 있는지 확인하기 위해서 (!|\.|,)?를 작성해주었습니다.
마지막으로 아에 값이 없는 경우를 체크하기 위해 IsNullOrEmpty를 사용하였습니다.
'코딩 테스트 > LeetCode' 카테고리의 다른 글
1337. The K Weakest Rows in a Matrix (행렬에서 가장 약한 K 행) (0) | 2023.11.03 |
---|---|
565. Array Nesting (배열 중첩) (0) | 2023.11.01 |
779. K-th Symbol in Grammar (문법의 K번째 기호) (0) | 2023.10.27 |
896. Monotonic Array (단조로운 배열) (0) | 2023.10.26 |
507. Perfect Number (완벽한 수) (0) | 2023.10.26 |