Aracade Intro #43 isBeautifulString. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar
Q.
A string is said to be beautiful if b occurs in it no more times than a; c occurs in it no more times than b; etc.
Given a string, check whether it is beautiful.
아름다운 문자열은... b의 개수가 a보다 많지 않고, c의 개수가 b보다 많지 않고, 등등...
주어진 문자열이 아름다운지 확인해봐라 (a, b, c, 알파벳 순서가 다 채워져 있어야함, 앞의 문자 개수가 같거나 많아야함)
e.g.
Input -> inputString = "bbbaacdafe"
Output -> isBeautifulString(inputString) = true
Input -> inputString = "aabbb"
Output -> isBeautifulString(inputString) = false
Input -> inputString = "bbc"
Output -> isBeautifulString(inputString) = false
//Process
//1. Input string
//2. Iterate from begin to the end
// 2.1. Make vector for alphabet count, index [ascii - 97]
//3. check first index equals a, it not -> false
//4. Iterate vector from begin+1 to the size
// 4.1. Check [i-1] is smaller than [i], if so -> false
//5. Return bool
//처리과정
//1. 문자열 입력받는다.//2. 시작부터 끝까지 반복한다// 2.1. 배열에 string 전체 char를 옮겨담는다 ([ascii - 97] 인덱스에) - dynamic programming//3. a 자리가 0이면 false;//4. 배열의 시작부터 끝까지 반복한다.// 4.1. i번째 값이 i+1 보다 크거나 같은지 확인해서// 4.1.1. 크거나 같으면// 4.1.1.1. 0 0 인지 확인해서 아니면 -> 넘어간다// 4.1.2. 작으면 -> false//5. 결과 리턴한다 (true)
Code.. Lemme see code!!!!!
코드.. 코드를 보자!!!!!
There are two solution for problem, 1st one (in annotation) is old one.
It was kinda hard to understand when i read again. So I did again using dynamic programming. 2nd one would be the better one.
두가지 방법으로 풀었는데, 첫번째 (주석처리된 것) 이 옛날 것이다.
다시보니까 이해하기 어려워서 다시품.. 동적프로그래밍 방식으로 벡터를 써서 풀었고..
2번째가 훨씬 나아보인다.
벡터 초기화 헷갈려서 썼던 글 다시봄..
vector initialization..
bool isBeautifulString(std::string inputString) {
bool answer = true;
int frontCharCount = 0;
int rearCharCount = 0;
bool isDone = false;
// 2nd solution
//initialize vector
std::vector<int> tempVector;
for (int i = 0; i < 25; ++i)
{
tempVector.push_back(0);
}
//fill in dynamic vector
for (int i = 0; i < inputString.size(); ++i)
{
cout << inputString[i] - 97 << endl;
++tempVector[inputString[i] - 97];
}
//check first a
if (tempVector[0] == 0) return false;
//check whole vector
for (int i = 1; i <= tempVector.size(); ++i)
{
if (tempVector[i-1] < tempVector[i])
{
return false;
}
}
// 1st solution
// std::sort(inputString.begin(), inputString.end());
// if (inputString[0] != 97)
// {
// answer = false;
// }
// int i = 0;
// while (!isDone && i < inputString.size() && answer == true)
// {
// ++frontCharCount;
// if (inputString[i+1] == 0 || inputString[i] != inputString[i+1])
// {
// if (inputString[i+1] != 0 && inputString[i]+1 != inputString[i+1])
// {
// answer = false;
// }
// isDone = true;
// }
// ++i;
// }
// while (i < inputString.size() && answer == true)
// {
// if (!isDone)
// {
// ++frontCharCount;
// }
// else
// {
// ++rearCharCount;
// }
// if (inputString[i+1] == 0 || inputString[i] != inputString[i+1])
// {
// if (inputString[i+1] != 0 && inputString[i]+1 != inputString[i+1])
// {
// answer = false;
// }
// if (isDone)
// {
// if (frontCharCount < rearCharCount)
// {
// answer = false;
// }
// frontCharCount = 0;
// isDone = false;
// }
// else
// {
// if (rearCharCount < frontCharCount)
// {
// answer = false;
// }
// rearCharCount = 0;
// isDone = true;
// }
// }
// ++i;
// }
return answer;
}
Something else you might like..
2018/12/16 - [Life/Health care] - L-Arginine 아르기닌 usage/side effects/dosage 효능/부작용/성인,소아 용법(2)
2018/12/04 - [Life/Health care] - Magnesium 마그네슘 usage/side effects/dosage 용법/효능/부작용
2018/12/03 - [Life/Health care] - Lecithin 레시틴 usage/side effects/dosage 효능/부작용/용법