아래의 조건을 모두 만족하는 비밀번호를 strong password라고 한다.
1. 길이는 6 이상이다.
2. 하나 이상의 대문자를 포함한다.
3. 하나 이상의 소문자를 포함한다.
4. 하나 이상의 특수문자(!@#$%^&*()-+)를 포함한다.
strong password를 만들기 위해 추가해야 하는 문자의 개수를 반환하라.
문자열 파싱
islower(toLowerCase), isupper(toUpperCase) 처리를 특수 문자 처리 이후에 해야 한다.
const letter = '#'; if (letter.toUpperCase() == letter){ console.log('대문자'); } if (letter.toLowerCase() == letter){ console.log('소문자'); } -> 대문자 -> 소문자
#은 대문자, 소문자가 아니라 특수문자로 분류되어야 한다.
하지만 두 조건문은 참으로 평가된다.
왜냐하면 자바스크립트에서 알파벳이 아닌 '1'이나 '#'같은 문자열을 toUpperCase(), toLowerCase() 메소드를 활용해서 대문자, 소문자로 바꿔주면 null이나 undefined같은 falsy한 값이 나오지 않고, 그대로 '1', '#'이 나오기 때문이다.
def minimumNumber(n, password):
required = [0, 0, 0, 0]
for char in password:
if (char in "!@#$%^&*()-+"):
required[0] = 1
elif char.isdigit():
required[1] = 1
elif char.isupper():
required[2] = 1
elif char.islower():
required[3] = 1
m = 4 - sum(required)
if m == 0:
return max(0, 6 - n)
else:
if n >= 6:
return m
else:
return max(6-n, m)
function minimumNumber(n, password) {
const required = [0, 0, 0, 0];
const arr = [];
for (const letter of password){
if (!isNaN(letter))required[0] = 1;
else if ("!@#$%^&*()-+".includes(letter)) required[3] = 1;
else if(letter === letter.toLowerCase()) required[1] = 1;
else if (letter === letter.toUpperCase()) required[2] = 1;
}
let answer = required.filter(elem=>elem === 0).length;
return ((answer + n) >= 6) ? answer : 6-n;
}