문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
Louise는 친구들과 연락하기 위해 소셜 네트워킹 사이트에 가입했다. 회원가입 페이지는 이름과 비밀번호를 입력하는 것을 필요했다. 그러나 비밀번호는 강력해야했다. 웹사이트는 다음 기준을 충족할 때 강력한 비밀번호라고 한다.
그녀는 길이 n의 임의의 문자열을 입력했지만 강력한 비밀번호인지 확신하지 못했다. 그녀가 입력한 문자열이 주어졌을 때, 비밀번호를 강력하게 만들기 위해 추가 해야하는 최소 문자 수를 찾을 수 있나?
문제를 해결하기 위해 사용되는 문자
numbers = "0123456789"
lower_case = "abcdefghijklmnopqrstuvwxyz"
upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
special_characters = "!@#$%^&*()-+"
password = '2bbbb'
이 비밀번호는 길이가 5인 문자열이고 대문자와 특수문자가 빠져있다. 추가해야 하는 최소 문자 수는 2이다.
password = '2bb#A'
이 비밀번호는 길이가 5인 문자열이고 각 문자 타입을 하나 이상씩 가지고 있다. 추가해야 하는 최소 문자 수는 1이다.
minimumNumber 함수를 완성해라.
minimumNumber 함수는 아래와 같은 매개변수를 가지고 있다.
정규표현식을 사용해서 풀었다. 패턴에 일치하는 것을 판단하지 않고 일부만 포함되어 있는지 확인했다.
각 String에 정규표현식을 사용해서 할당했다.
String numbers = ".*[0-9].*";
String lowerCase = ".*[a-z].*";
String upperCase = ".*[A-Z].*";
String specialCharacters = ".*[!@#$%^&*()+-].*";
Pattern.matches()를 통해 포함하는지 판단하여 변수에 할당한다.
boolean isNumbers = Pattern.matches(numbers, password);
boolean isLowerCase = Pattern.matches(lowerCase, password);
boolean isUpperCase = Pattern.matches(upperCase, password);
boolean isSpecialCharacters = Pattern.matches(specialCharacters, password);
boolean 값에 따라 문자가 추가되어야 하는지 판단하고 추가 되는 문자 수를 증가시킨다.
int addCharacter = 0;
if(!isNumbers){
addCharacter++;
}
if(!isLowerCase){
addCharacter++;
}
if(!isUpperCase){
addCharacter++;
}
if(!isSpecialCharacters){
addCharacter++;
}
조건문을 통해 하나 더 판단해야한다. 기존의 문자열 길이와 추가되는 문자열의 수를 더해서 최고 길이 6을 보다 작은지 판단해서 최소 길이에 맞게 반환한다. 그렇지 않으면 추가 되는 문자 수를 반환한다.
if(password.length() + addCharacter < 6){
return 6 - password.length();
}
return addCharacter;
public static int minimumNumber(int n, String password) {
String numbers = ".*[0-9].*";
String lowerCase = ".*[a-z].*";
String upperCase = ".*[A-Z].*";
String specialCharacters = ".*[!@#$%^&*()+-].*";
boolean isNumbers = Pattern.matches(numbers, password);
boolean isLowerCase = Pattern.matches(lowerCase, password);
boolean isUpperCase = Pattern.matches(upperCase, password);
boolean isSpecialCharacters = Pattern.matches(specialCharacters, password);
int addCharacter = 0;
if(!isNumbers){
addCharacter++;
}
if(!isLowerCase){
addCharacter++;
}
if(!isUpperCase){
addCharacter++;
}
if(!isSpecialCharacters){
addCharacter++;
}
if(password.length() + addCharacter < 6){
return 6 - password.length();
}
return addCharacter;
}