혜랑's STORY

[HackerRank] Strong Password 본문

2021 SISS 21기 활동/2학기 C

[HackerRank] Strong Password

hyerang0125 2021. 11. 8. 21:19

 

6주차 자유 문제
Prepare > Algorithms > Strings

풀이

문제에서 요구하는 것은 주어진 조건을 만족하기 위해 추가해야 할  최소한의 문자이다. 문제에 주어진 조건을 checkList로 만들어 두고, 이 조건을 만족하는지 확인하기 위해 check 배열을 만들어 주었다. 코드는 간단히 살펴볼 수 있다. 각 조건에 만족하는 값이 password에 있다면 check에 true를 넣고 다음 조건을 검사하는 방식이다. 최종적으로 !check[i]를 만족하는 즉, 문자를 추가해야 하는 수를 센다. 이때 바로 이 값을 넘기는 것이 아니라 password 최소 길이인 6을 만족하는지 검사하게 된다. 만약, 길이를 만족하지 못하고 부족한 길이 만큼이 미리 계산해둔 cnt보다 크다면 cnt는 부족한 길이 만큼의 수가 된다.

코드는 다음과 같다.

int minimumNumber(int n, string password) {
    // Return the minimum number of characters to make the password strong
    int cnt, idx;
    bool check[4] = {false,};
    string checkList[] = {"0123456789", "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "!@#$%^&*()-+"};
    
    for(int i=0; i<4; i++){
        idx = 0;
        for(int j=0; j<checkList[i].length(); j++){
            for(int k=0; k<password.length(); k++){   
                if(checkList[i][j] == password[k]){
                    cout << checkList[i][j] <<" "<<password[idx]<<endl;
                    check[i] = true;
                    break;
                }
            }
        }
    }
    
    cnt = 0;
    for(int i=0; i<4; i++){
        cout << check[i]<<endl;
        if(!check[i]) ++cnt;
    }
    
    if(password.length() < 6){
        if(cnt < 6 - password.length())
            cnt = 6 - password.length();
    }
    
    return cnt;
}

 

결과