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 |