strong password에는 5가지 기준이 있다.
- 최소 6자리 이상
- 숫자 1개 이상
- 소문자 1개 이상
- 대문자 1개 이상
- 특수문자 1개 이상 !@#$%^&*()-+
문제에서 준 문자열을 사용했다.
numbers = "0123456789"
lower_case = "abcdefghijklmnopqrstuvwxyz"
upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
special_characters = "!@#$%^&*()-+"
strong password를 위해 몇 개의 문자를 추가해야 하는지 출력하면 된다.
첫번째 예제를 보면, Ab1의 경우 조건 1, 5를 충족하지 않는다. 6자리를 충족하려면 특수문자를 포함한 3개의 문자가 더 필요하므로 출력할 정수는 3이다.
두번째 예제는 숫자를 포함하지 않았으므로 1개의 문자가 더 필요하다.
주의할 부분은 password가 6자리 미만일 때 답이 항상 6 - n가 아니라는 점이다.
password가 aaaa일 경우, 1번 조건을 충족시키기 위해서는 2개의 문자가 필요하지만 나머지 조건을 충족시키기 위해서는 3개의 문자가 필요하므로(대문자, 숫자, 특수문자) 출력해야 할 숫자는 3이다.
int minimumNumber(int n, char* password) {
// Return the minimum number of characters to make the password strong
char numbers[11] = "0123456789";
char lower_case[27] = "abcdefghijklmnopqrstuvwxyz";
char upper_case[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char special_characters[13] = "!@#$%^&*()-+";
int i, j, check[5] = {1,1,1,1,1}, answer=0;
if(n>=6) check[0]--;
for(i=0; password[i]!='\0'; i++){
for(j=0; j<10; j++){
if(password[i]==numbers[j]) check[1] = 0;
}
for(j=0; j<26; j++){
if(password[i] == lower_case[j]) check[2] = 0;
}
for(j=0; j<26; j++){
if(password[i] == upper_case[j]) check[3] = 0;
}
for(j=0; j<12; j++){
if(password[i] == special_characters[j]) check[4] = 0;
}
}
if(!check[0]){
for(i=1; i<5; i++){
if(check[i]) answer++;
}
}else{
for(i=1; i<5; i++){
if(check[i]) answer++;
}
if(n+answer<6){
answer += 6-n-answer;
}
}
for(i=0; i<5; i++) printf("%d ", check[i]);
return answer;
}
int형 배열 check[5]를 선언해 5가지의 조건을 충족하는지 확인하는 용도로 사용했다. 배열을 1로 채워두고 조건을 충족할 때마다 0으로 바꿔주었다. 첫번째 조건을 충족하는지 아닌지 확인해, 충족할 경우 나머지 배열값을 answer에 더해준다. 길이가 6보다 작으면 조건을 충족해야 하는 문자 개수를 먼저 확인한 뒤, 원래 길이와 answer를 합했을 때 6보다 작다면 6에서 n과 answer를 뺀 값을 더해주었다. (6자리 이상을 충족시키기 위해)
'HackerRank > Algorithms' 카테고리의 다른 글
[HackerRank] Sorting > Counting Sort 2 (0) | 2021.09.12 |
---|---|
[HackerRank] Strings > Caesar Cipher (0) | 2021.08.26 |
[HackerRank] Strings > Pangrams (0) | 2021.08.26 |
[HackerRank] Search > Ice Cream Parlor (0) | 2021.08.26 |
[HackerRank] Warmup > Diagonal Difference (0) | 2021.08.14 |