
내가 생각했을때 문제에서 원하는부분
입력은 여러개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 테스트할 패스워드가 주어진다.
마지막 테스트 케이스는 end이며, 패스워드는 한글자 이상 20글자 이하의 문자열이다. 또한 패스워드는 대문자를 포함하지 않는다.
각 테스트 케이스를 '예제 출력'의 형태에 기반하여 품질을 평가하여라.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 읽고, "end"가 입력될 때까지 반복한다.
비밀번호 검사:
containsVowel: 비밀번호에 모음이 포함되어 있는지 확인한다.
hasThreeConsecutive: 모음 또는 자음이 3개 연속으로 오는지 확인한다.
hasConsecutiveLetters: 같은 문자가 두 번 연속으로 오는지 확인하되, 'ee'와 'oo'는 허용한다.
결과 출력: 검사를 통해 비밀번호의 품질을 평가하고 결과를 StringBuilder에 저장하여 한 번에 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 4659번 문제
public class Main958 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String password;
while(!(password = br.readLine()).equals("end")) {
if(isAcceptable(password)) {
sb.append("<").append(password).append("> is acceptable.\n");
} else {
sb.append("<").append(password).append("> is not acceptable.\n");
}
}
System.out.print(sb.toString());
br.close();
}
private static boolean isAcceptable(String password) {
if(!containsVowel(password)) {
return false;
}
if(hasThreeConsecutive(password)) {
return false;
}
if(hasConsecutiveLetters(password)) {
return false;
}
return true;
}
private static boolean containsVowel(String password) {
return password.contains("a") || password.contains("e") || password.contains("i") ||
password.contains("o") || password.contains("u");
}
private static boolean hasThreeConsecutive(String password) {
int vowelCount = 0;
int consonantCount = 0;
for(char c : password.toCharArray()) {
if("aeiou".indexOf(c) >= 0) {
vowelCount++;
consonantCount = 0;
} else {
consonantCount++;
vowelCount = 0;
}
if(vowelCount >= 3 || consonantCount >= 3) {
return true;
}
}
return false;
}
private static boolean hasConsecutiveLetters(String password) {
for(int i = 0; i < password.length() - 1; i++) {
char current = password.charAt(i);
char next = password.charAt(i + 1);
if(current == next && !(current == 'e' || current == 'o')) {
return true;
}
}
return false;
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.