알고리즘
[BOJ] 4659번 : 비밀번호 발음하기 (JAVA)
애용쓰
2023. 1. 18. 21:24
https://www.acmicpc.net/problem/4659
4659번: 비밀번호 발음하기
좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class hy {
//문자가 모음인지 자음인지 check, 모음이면 1, 자음이면 -1
public static int check(char x){
switch (x){
case 'a': case 'e': case 'i': case 'o': case 'u': return 1;
default: return -1;
}
}
public static void test(String x){
boolean isOk = true;
//1. 모음 하나 반드시 포함
if(x.contains("a")||x.contains("e")||x.contains("i")||x.contains("o")||x.contains("u"))
isOk = true;
else isOk = false;
//2. 모음 또는 자음이 3개연속이면 안됨
int point = 0;
for(int i=0;i<x.length();i++){
if(check(x.charAt(i))>0&&point>0) point++;
else if(check(x.charAt(i))<0&&point<0) point--;
else point = check(x.charAt((i)));
if(Math.abs(point)==3) isOk = false;
}
//3. 같은 글자 연속 두번 안됨, ee와 oo는 허용
for(int i=1;i<x.length();i++){
if(x.charAt(i-1)==x.charAt(i)&&x.charAt(i-1)!='e'&&x.charAt(i-1)!='o')
isOk = false;
}
if(isOk)
System.out.println("<"+x+"> is acceptable.");
else
System.out.println("<"+x+"> is not acceptable.");
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
String input = br.readLine();
if(input.equals("end")) break;
else{
test(input);
}
}
}
}
이 부분 구현이 새로웠다. 절대값으로 연속하는지 아닌지를 판단하는 것...
//2. 모음 또는 자음이 3개연속이면 안됨
int point = 0;
for(int i=0;i<x.length();i++){
if(check(x.charAt(i))>0&&point>0) point++;
else if(check(x.charAt(i))<0&&point<0) point--;
else point = check(x.charAt((i)));
if(Math.abs(point)==3) isOk = false;
}
point는 처음에 0이다.
그 이후 문자열의 문자를 검사한다.
point가 0보다 크거나 작으면 일단 첫 글자가 아니라는 것이다 !
문자가 모음이면서 point가 양수이면 연속해서 모음이 나왔다는 것, point를 ++
문자가 자음이면서 point가 음수이면 연속해서 자음이 나왔다는 것, point를 --
그게 아니라면 point는 문자 타입을 따라간다. 모음이면 1, 자음이면 -1.
이 때 point의 절대값이 3이면 모음 또는 자음이 3개 연속이라는 것임을 알 수 있다.