본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Strong Password

Strong Password | HackerRank

 

Strong Password | HackerRank

How many characters should you add to make the password strong?

www.hackerrank.com

 

<문제>

strong password가 되려면 비밀번호 길이는 최소 6이 되어야 하고, numbers, lower_case, upper_case, special_characters가 각각 최소 한 글자씩 있어야 한다.

 

input: 첫번째 줄에는 비밀번호의 길이를 입력하고, 두번째 줄에는 비밀번호를 입력한다.

output: 추가해야할 문자의 최소 개수를 출력한다.

 

<코드>

int minimumNumber(int n, char* password) {
   int len=strlen(password);
    int *v=(int*)calloc(4,sizeof(int));
    while(*password)
    {
        if(*password>='0'&& *password<='9')
            v[0]=1;
        else if(*password>='a' && *password<='z')
            v[1]=1;
        else if(*password>='A' && *password<='Z')
            v[2]=1; 
        else{    
          v[3]=1; 
        }
        password++;
    }
    int counter=0;

    for(int i=0;i<4;i++)
    {    if(v[i]!=0){       
            counter++;
        }
    }
    if(len<3)
        return 6-len;
    else if(len <6){
       int res1=(len)+(4-counter);
        if(res1<6){ 
           int res2=6-res1;
           return res2+(4-counter);  
       }
        else
          return (4-counter);
    }
        
    else
        return (4-counter);
    
}

 

<풀이>

먼저 numbers, lower_case, upper_case, special_characters의 존재 여부를 확인하기 위해 0과 1을 저장하는 크기 4인 배열 v를 동적할당한다. 
이 때, malloc 대신 calloc 함수를 사용해서 배열 v를 할당하면서 모두 0으로 초기화하였다. 그런다음 password문자열을 하나씩 while반복문을 통해 살펴보면서 numbers, lower_case, upper_case, special_characters가 있으면 v[i]에 1을 저장하고, 없으면 0을 저장해둔다.
다음으로 counter 변수를 선언하여 만약 v[i]가 0이 아니면 counter 값을 1씩 더한다.
비밀번호의 길이가 3보다 작으면 길이가 6이 되기 위해 6-len을 리턴한다.
만약 len<6 이고, len+4-counter을 저장한 res1이 6보다 작으면 res2에 6-res1값을 저장하고 res2+4-counter을 리턴한다. 아니면 res1이 6 이상이므로 그냥 문자 종류를 더 추가해야하는 4-counter만 리턴하면 된다.
마지막으로 len>=6이면 4-counter을 리턴하도록 하여 문제를 풀 수 있었다.

 


<실행결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글

[HackerRank] Print in Reverse  (0) 2021.07.27
[HackerRank] Sales by Match  (0) 2021.07.22
[HackerRank] Reverse a linked list  (0) 2021.07.22
[HackerRank] Delete a Node  (0) 2021.07.18
[HackerRank] Migratory Birds  (0) 2021.07.17