[JS+Python/HackerRank] Strong Password

정나린·2023년 4월 3일
0

💬 문제

문제 난이도: Easy

문제 링크: https://www.hackerrank.com/challenges/strong-password/problem?isFullScreen=true

문제 설명

아래의 조건을 모두 만족하는 비밀번호를 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', '#'이 나오기 때문이다.

코드(Python)

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)

코드(Javascript)

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;
}

0개의 댓글