본문 바로가기

Algorithm/Code Fights (Code Signal)

Aracade Intro #43 isBeautifulString. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

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..


2018/11/17 - [Programming/C++] - How to initialize vector in C++ STL (Standard Template Library), STL 벡터 초기화 방법





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 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #42 bishopAndPawn. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/12/14 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #41 digitDegree. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/12/12 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #40 longestDigitsPrefix. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/12/10 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #39 knapsackLight. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/12/10 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #38 growingPlant. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/12/10 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #37 arrayMaxConsecutiveSum. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar

2018/12/10 - [Algorithm/Code Fights (Code Signal)] - Aracade Intro #36 differentSymbolsNaive. Algorithm, 알고리즘, Codefights, CodeSignal, 코드파이트, 코드시그널, 예제, example, c++ java c# scalar



2018/12/13 - [Computer/Linux] - How to check ongoing live process on Linux cmd, 리눅스 커맨드창에서 어떤 프로세스가 실행중인지 확인하기, java, ubuntu, cpp


2018/12/13 - [Programming/Java] - How to change color theme in JavaFx example, 자바Fx 전체적인 색 테마 바꾸기 예제, ui, 디자인


2018/12/11 - [Computer/General] - How to make Windows10 iso booting usb in Ubuntu, 우분투에서 윈도우즈 10 부팅 usb 만들기, 리눅스 우분트 윈도우즈 설치



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 효능/부작용/용법