728x90
반응형
문자열이 "beautiful"한지 여부를 판단하는 것입니다. 여기서 "beautiful"한 문자열이란, 각 문자가 알파벳 순서대로 이전 문자보다 더 자주 나타나지 않는 경우를 의미합니다. 예를 들어, 'b'는 'a'보다 더 자주 나타나면 안 되고, 'c'는 'b'보다 더 자주 나타나면 안 되는 식입니다.
문자열은 소문자 알파벳으로 이루어져 있습니다.
문자열의 길이는 최소 3이며 최대 50입니다.
예를 들어, "bbbaacdafe"와 같은 문자열은 beautiful한 문자열이지만, "aabbb"나 "bbc"와 같은 문자열은 beautiful하지 않습니다.
문제의 목표는 입력 문자열이 beautiful한지 여부를 판단하여 true 또는 false를 반환하는 것입니다.
bool solution(string inputString) {
Dictionary<char,int> dic = new Dictionary<char, int>();
List<char> list = new List<char>();
foreach(char c in inputString){
if(!dic.ContainsKey(c)){
dic[c] = 1;
list.Add(c);
}
else{
dic[c]++;
}
}
list.Sort();
for (int i = 0; i < list.Count; i++)
{
if(list[i] == 'a') continue;
char prevChar = (char)(list[i] - 1);
char currentChar = list[i];
if (!dic.ContainsKey(prevChar) || dic[prevChar] < dic[currentChar])
{
return false;
}
}
return true;
}
Dictionary<char, int> dic = new Dictionary<char, int>();: 각 문자의 등장 횟수를 기록하기 위한 딕셔너리 dic을 생성합니다.
List<char> list = new List<char>();: 문자열에서 등장한 문자들의 순서를 저장하기 위한 리스트 list를 생성합니다.
문자열을 순회하면서 각 문자의 등장 횟수를 세고, 등장한 문자들을 list에 추가합니다.
list를 정렬합니다.
정렬된 list를 순회하면서 각 문자에 대해 이전 문자와의 등장 횟수 비교를 통해 "beautiful" 여부를 판단합니다.
만약 어떤 문자 currentChar에 대해 prevChar가 존재하지 않거나, prevChar의 등장 횟수가 currentChar의 등장 횟수보다 작다면, 해당 문자열은 "beautiful"하지 않습니다.
모든 문자에 대해 위의 조건을 만족하면, 문자열은 "beautiful"하다고 판단하고 true를 반환합니다.
a의 경우 앞의 문자 검사하는 부분을 돌면 안되기 때문에 예외처리를 해주었다.
728x90
반응형
'CodeSignal' 카테고리의 다른 글
Elections Winners (0) | 2024.01.01 |
---|---|
buildPalindrome (0) | 2023.12.31 |
Bishop and Pawn (0) | 2023.12.30 |
digitDegree (0) | 2023.12.30 |
longestDigitsPrefix (1) | 2023.12.30 |